#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int kMaxN = 5e5 + 10, kMaxM = 5e5 + 50, kMaxK = 5e5 + 20;
int n, m, head[kMaxM], idx = 0, in[kMaxN], out[kMaxN], f[kMaxN], ans = 0;
struct node {
int u, v, next;
}e[kMaxK];
void add(int u, int v) {
e[++ idx].u = u;
e[idx].v = v;
e[idx].next = head[u];
head[u] = idx;
}
int dfs(int S)
{
if (f[S]) {
return f[S];
}
int sum = 0;
if (!out[S] && in[S]) {
++ sum;
}
for (int i = head[S]; i; i = e[i].next) {
sum += dfs(e[i].v);
}
return f[S] = sum;
}
int main() {
cin >> n >> m;
for (int i = 1, x, y; i <= m; ++ i) {
cin >> x >> y;
add(x, y);
++ in[y];
++ out[x];
}
for (int i = 1; i <= n; ++ i) {
if (!in[i]) {
ans = ans + dfs(i) % 80012002;
}
}
cout << ans % 80012002 << '\n';
return 0;
}