#include <bits/stdc++.h>
using namespace std;
long long n, m;
long long ans=-1;
const int MAXN=1e5+1;
vector<long long > G[50005];
long long to[50005];
long long in[50005];
long long num[50005];
bool toposort() {
vector<long long > L;
queue<long long > S;
for(int i=0;i<=n;i++){
if(!in[i]){
num[i]=1;
S.push(i);
}
}
while (!S.empty()) {
long long u = S.front();
S.pop();
L.push_back(u);
for (auto v : G[u]) {
in[v]--;
num[v]=(num[v]+num[u])%80112002;
if (--in[v] == 0) {
S.push(v);
}
}
}
for(long long i = 1; i <= n; ++i)
if(!to[i])
ans = (ans + num[i]) %80112002;
}
int main()
{
cin>>n>>m;
for(long long i=1;i<=m;i++){
long long a,b;
scanf("%d%d",&a,&b);
G[b].push_back(a);
to[a]++;
in[b]++;
}
toposort();
cout<<ans;
return 0;
}