//拓扑排序的模板
#include <iostream>
using namespace std;
struct data
{
int in; // 某点的入度
int out; // 某点的出度
}s[];
int a,b,n,stk[];
bool visited[];
bool map[][];
int calc()
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(map[i][j])
{
s[i].out++;
s[j].in++;
}
}
}
for(i=0;i<n;i++)
if( s[i].in + s[i].out != n-1 )
return 0;
return 1;
}
void push(int k);
{
stk[++top] = k;
}
void toplogical_sort()
{
int i,j;
bool flg = 1;
int zerop;
for(i=1;i<=n;i++)
{
if(!s[i].in)
{
zerop = i;
break;
}
}
memset(visited,false,sizeof(visited));
while(flg)
{
flg = 0;
for(i=1;i<=n;i++)
{
if ( !visited[i] )
{
if (map[zerop][i])
{
s[i].in--;
}
if ( s[i].in == 0 )
{
zerop = i;
flg = 1;
}
}
}
}
}
void Output() //输出拓扑排序的结果
{
int i;
for(i=1;i<=top;i++)
cout << stk[i] << " ";
cout << endl;
}
int main()
{
memset(map,0,sizeof(map));
memset(s,0,sizeof(s));
for(i=1;i<=n;i++)
{
cin >> a >> b;
s[a].out++;
s[b].in++;
map[a][b] = 1;
}
top = 0;
calc();
toplogical_sort();
Output();
return 0;
}