https://www.luogu.com.cn/problem/P4017
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int>PII;
typedef vector<int> VI;
const int N = 5005, INF = 0x3fffffff, MOD = 80112002, M = 500010;
const double PI = acos(-1), EPS = 1e-6;
int n, m;
int a[N], f[N], d[N], dd[N];
int e[M], ne[M], h[N], idx;
void add(int x, int y){
e[idx] = y, ne[idx] = h[x], h[x] = idx++;
}
//记忆化搜索
int dfs(int u){
int &v = f[u];
if(v) return 1;
//没有天敌,那么就是食物链的末尾
if(!dd[u]) return f[u] = 1;
bool flag = false;
for(int i = h[u]; i != -1; i = ne[i]){
int j = e[i];
if(dfs(j)) v = ((LL)v + f[j]) % MOD, flag = true;
}
return flag;
}
int main(){
scanf("%d%d", &n, &m);
memset(h, -1, sizeof h);
for(int i = 0; i < m; i++){
int x, y;
scanf("%d%d", &x, &y);
add(x, y);
d[y]++;
dd[x]++;
}
int ans = 0;
for(int i = 1; i <= n; i++)
if(!d[i] && dfs(i)) ans = ((LL)ans + f[i]) % MOD;
printf("%d\n", ans);
return 0;
}