#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXN 91 int v[MAXN], n, t, q[MAXN], G[MAXN][MAXN]; int dfs(int i){ v[i] = -1; int j; for(j=1; j<=n; j++) if(G[i][j]){ if(v[j]<0) return 0; //发现环 if(!v[j] && !dfs(j)) return 0; } q[t--] = i; v[i] = 1; //加到当前拓扑排序的首部 return 1; } int toposort(){ t = n; int u; memset(v, 0, sizeof(v)); for(u=1; u<=n; u++) if(!v[u]){ if(!dfs(u)) return 0; } return 1; } int main(){ freopen("d:\\my.txt", "r", stdin); int m, i; scanf("%d %d", &n, &m); memset(G, 0, sizeof(G)); for(i=1; i<=m; i++){ int a, b; scanf("%d %d", &a, &b); G[a][b] = 1; } toposort(); for(i=1; i<=n; i++){ if(i != n) printf("%d ", q[i]); else printf("%d\n", q[i]); } return 0; }