记忆化搜索
#include <bits/stdc++.h>
using namespace std;
#define mod %80112002
#define maxn 5005
int n,m,maxlen=0,res[maxn];
std::vector<int> v[maxn];
bool isproducer[maxn];
int dfs(int i)
{
if(v[i].empty()) return res[i]=1;
int len=0;
for (int k = 0; k < v[i].size(); ++k)
{
len+=res[v[i][k]]==0?dfs(v[i][k]):res[v[i][k]];
len=len mod;
}
return res[i]=len mod;
}
int main(int argc, char const *argv[])
{
cin>>n>>m;
while(m--)
{
int a,b;
cin>>a>>b;
v[a].push_back(b);
isproducer[b]=1;
}
for(int i=1;i<=n;i++)
{
if(!isproducer[i])
maxlen+=dfs(i) ;
maxlen=maxlen mod;
}
cout<<maxlen<<endl;
return 0;
}