//时间复杂度(n+e) n:顶点数 e:边数 #include<cstdio> #include<vector> #include<queue> using namespace std; const int MAXN=1000; struct cmp{ bool operator()(int x,int y) { return x>y; } }; vector<int> map[MAXN]; priority_queue<int,vector<int>,cmp> que; int cnt[MAXN]; int main() { int N,M; int i,j; int p1,p2,tmp,count,a; while(scanf("%d%d",&N,&M)==2) { for(i=1;i<=N;i++) { map[i].clear(); cnt[i]=0; } while(!que.empty()) que.pop(); for(i=1;i<=M;i++) { scanf("%d%d",&p1,&p2); map[p1].push_back(p2); cnt[p2]++; } for(i=1;i<=N;i++) { if(!cnt[i]) que.push(i); } count=0; while(!que.empty()) { count++; tmp=que.top(); que.pop(); printf("%d",tmp); if(count<N) printf(" "); else printf("\n"); for(i=0;i<map[tmp].size();i++) { a=map[tmp][i]; cnt[a]--; if(cnt[a]==0) que.push(a); } } } return 0; }