#include <bits/stdc++.h>
using namespace std;
int n, m, fr, to, a1[5005], b1[5005], a[5005], b[5005];
int vis[5005];
int j_1, j2;
vector <int> vt[5005];
void dfs(int x, int y, int z){
if (vis[x]){
return;
}
int len = vt[x].size();
for (int i = 0; i < len; i++){
bool flag = 0;
for (int j = 0; j < j2; j++){
if (vt[x][i] == b[j]){
vis[x]++;
flag = 1;
break;
}
}
if (!flag){
if (!z){
dfs(vt[x][i], y, 1);
} else {
dfs(vt[x][i], x, 1);
}
}
vis[x] += vis[vt[x][i]];
}
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin >> n >> m;
while (m--){
cin >> fr >> to;
a1[to] = b1[fr] = 1;
vt[fr].push_back(to);
}
for (int i = 1; i <= n; i++){
if (a1[i] == 0){
a[j_1++] = i;
}
if (b1[i] == 0){
b[j2++] = i;
}
}
for (int i = 0; i < j_1; i++){
dfs(a[i], a[i], 0);
}
int sum = 0;
for (int i = 0; i < j_1; i++){
sum += vis[a[i]];
}
cout << sum % 80112002;
return 0;
}