code [复制]
#include<bits/stdc++.h>
using namespace std;
int n,m;
int g[50005][50005];
int rd[5005];
int a[50005];
queue<int> q;
int k=0;
void topsort(){
while(!q.empty()){
int t=q.front();
a[++k]=t;
q.pop();
for(int i=1;i<=n;i++){
if(g[t][i]==1){
rd[i]--;
g[t][i]=0;
if(rd[i]==0)q.push(i);
}
}
}
return;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
g[x][y]=1;
rd[y]++;
}
for(int i=1;i<=n;i++){
if(rd[i]==0){
q.push(i);
}
}
topsort();
if(k!=n){
cout<<"0";
return 0;
}
int cnt=0;
for(int i=1;i<=k;i++)cnt++;
cout<<cnt%80112002;
return 0;
}