#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#define nMAX 510
using namespace std;
vector<int> g[nMAX];//每个点的链表
int have[nMAX];//存每个点的入度
int main()
{
int i,j,k,n,m,x,y;
bool o;
while (~scanf(“%d%d”,&n,&m))
{
for (i = 1; i <= n; i++)//清空链表
{
g[i].clear();
}
memset(have, 0, sizeof(have));
while (m–)
{
scanf(“%d%d”,&x,&y);
g[x].push_back(y);//将y存到x的链表里面
have[y]++;
}
for (i = 0, o = false; i < n; i++)//循环n次
{
for (j = 1; j <= n; j++)
{
if (have[j] == 0)
{
o && printf(” “);
printf(“%d”,j);
o = true;
have[j] = -1;//删除j点
for (k = 0; k < g[j].size(); k++)//将g[j]链表里的所有的点的入度都减1
{
have[g[j][k]]–;
}
break;//每次找到一个就结束,并且总是在这个for循环之后加break,要每次找到之后才结束,不是每次循环直接结束。
}
}
}
printf(“\n”);
}
return 0;
}