#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
const int maxn=1e6+10;
int n,m,t;
int G[1000][1000],id[1000],topo[1000];
void toposort()
{
queue<int> q;
int t=0;
for(int i=1;i<=n;i++)
if(id[i]==0)
q.push(i);//入度为零的放进队列
while(!q.empty())
{
int u=q.front();
q.pop();
topo[t++]=u;//入度为零的就是排好的,拿出来
for(int i=1;i<=n;i++)//这个循环用来删除拿出来的点和相连接的点的边
if(G[u][i]!=0)
if(–id[i]==0)
q.push(i);
}
printf(“%d”,topo[0]);
for(int i=1;i<t;i++)
printf(” %d”,topo[i]);
printf(“\n”);
}
int main()
{
while(scanf(“%d%d”,&n,&m) && (m!=0 || n!=0))
{
memset(G,0,sizeof(G));
memset(id,0,sizeof(id));
int a,b;
for(int i=1;i<=m;i++)
{
scanf(“%d%d”,&a,&b);
G[a][b]=1;
id[b]++;//记录每个点的入度
}
toposort();
}
return 0;
}