求调
#include<bits/stdc++.h>
#define mod 80112002
#define sz 500015
using namespace std;
int n,m,s,e,dp[5050],ans;
struct node
{
int up;
vector<int>next;
}a[5050];
void topo(int p)
{
queue<int>q;
q.push(p);
dp[p]=1;
while(!q.empty())
{
e=q.front();
for(int i=0;i<a[e].next.size();i++)
{
dp[a[e].next[i]]+=(dp[e]%mod);
--a[a[e].next[i]].up;
if(!a[a[e].next[i]].up) q.push(a[e].next[i]%mod);
}
q.pop();
}
return ;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
a[v].next.push_back(u);
a[u].up++;
}
for(int i=1;i<=n;i++)
{
if(!a[i].up)
{
s=i;
break;
}
}
topo(s);
for(int i=1;i<=n;i++)
{
if(!a[i].next.size()) ans=(ans%mod+dp[i]%mod)%mod;
}
printf("%d",ans%mod);
return 0;
}