https://vjudge.net/problem/UVA-10305
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
typedef vector<int> vi;
const int N=100+10;
vector<vi> g;
bool vis[N];
int ans[N];
int cnt;
void dfs(int u){
vis[u]=1;
for(auto v:g[u])
if(!vis[v])dfs(v);
ans[cnt--]=u;
}
int main(){
int n,m;
while(scanf("%d%d",&n,&m),n||m){
g=vector<vi>(n+1);
memset(vis,0,sizeof(vis));
int x,y;
for(int i=0;i<m;i++){
scanf("%d%d",&x,&y);
g[x].push_back(y);
}
cnt=n;
for(int i=1;i<=n;i++)
if(!vis[i])dfs(i);
int i;
for(i=1;i<n;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[i]);
}
}