/*拓扑排序去寻找点的拓扑序 便于DP,那么怎么去找 首先邻接表存边,然后dfs搜寻每一个点 最后进行拓扑排序,找到拓扑序*/ #include<bits/stdc++.h> const int maxn = 100005; const int maxm = 200005; using namespace std; int n,m,p=1; int a,b; int dp[maxn]; int h[maxn],v[maxm],zrj[maxm]; void add(int a,int b) { zrj[p]=h[b]; h[b]=p; v[p]=a; p++; } int dfs(int y,int x) { if (dp[x]) return dp[x]; for (int j=h[x],u=v[j]; j; j=zrj[j],u=v[j]) { dp[x]=max(dfs(y+1,u)+1,dp[x]); } return dp[x]; } int main() { cin>>n>>m; for (int i=1; i<=m; i++) { cin>>a>>b; add(a,b); } for (int i=n; i>=1; i--) dfs(1,i); for (int i=1; i<=n; i++) cout<<dp[i]+1<<endl; return 0; }