#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#define int long long
using namespace std;
const int maxn=5e3+5,mod=8011200280112002 ;
int n,m,ans,U,V;
int indegree[maxn],outdegree[maxn],dp[maxn];
vector<int> v[maxn];
void topo(){
queue<int> q;
for(int i=1;i<=n;i++)
if(!indegree[i]){
dp[i]=1;
q.push(i);
}
while(q.size()){
int now=q.front();
q.pop();
for(int i=0;i<v[now].size();i++){
indegree[v[now][i]]--;
dp[v[now][i]]=(dp[v[now][i]]%mod+dp[now]%mod)%mod;
if(!indegree[v[now][i]])
q.push(v[now][i]);
}
}
}
signed main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=m;i++){
scanf("%lld%lld",&U,&V);
v[V].push_back(U);
indegree[U]++;
outdegree[V]++;
}
topo();
for(int i=1;i<=n;i++)
if(!outdegree[i])
ans=(ans+dp[i])%mod;
printf("%lld\n",ans);
return 0;
}