#include<bits/stdc++.h>
using namespace std;
long long dp[5001],n,m,c[5001],bc[5001],start[5001],end[5001],ans=0,len1=0,len2=0;
bool flag[5001][5001];
void dfs(int now){
bool bj=0;
for(int i=1;i<=n;i++){
if(flag[now][i]==1){
dp[i]++,bj=1;
dfs(i);
}
}
if(!bj) return ;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
bc[a]++,c[b]++;
flag[a][b]=1;
}
for(int i=1;i<=n;i++){
if(bc[i]==0){
end[++len1]=i;
}
else if(c[i]==0){
start[++len2]=i;
}
}
for(int i=1;i<=len1;i++){
dp[start[i]]=1;
dfs(start[i]);
}
for(int i=1;i<=len2;i++){
ans+=dp[end[i]];
}
cout<<ans%80112002;
return 0;
}
用的深搜,结果自闭,召唤dalao之术!!!