#include <stdio.h> #include <vector> #include <queue> using namespace std; int indegree[505]; vector<int> edge[505]; priority_queue<int , vector<int> , greater<int> > Q; int main() { int output[505]; int n,m,i; while(scanf("%d%d",&n,&m)!=-1) { if(n==0 && m==0) break; for(i=1;i<=n;i++) { indegree[i]=0; edge[i].clear(); output[i]=0; } while(m--) { int a,b; scanf("%d%d",&a,&b); edge[a].push_back(b); indegree[b]++; } while(!Q.empty()) Q.pop(); for(i=1;i<=n;i++) { if(indegree[i]==0) Q.push(i); } int size=0; while(!Q.empty()) { int tmp=Q.top(); Q.pop(); output[size++]=tmp; for(i=0;i<edge[tmp].size();i++) { indegree[edge[tmp][i]]--; if(indegree[edge[tmp][i]]==0) Q.push(edge[tmp][i]); } } for(i=0;i<size;i++) { if(i) printf(" %d",output[i]); else printf("%d",output[i]); } printf("\n"); } return 0; } /************************************************************** Problem: 2226 User: admin Language: C++ Result: Accepted Time:10 ms Memory:1224 kb ****************************************************************/