#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int N = 110;
int n;
vector<int> a[N]; // 存图 -- 孩子表示法
int in[N]; // 存入度
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
int x;
while (cin >> x, x)
{
a[i].push_back(x);
// 是 i 的孩子,肯定会被他的边指,入度加一
in[x]++;
}
}
queue<int> q;
// 找出入度为0的入队
for (int i = 1; i <= n; i++)
{
if (in[i] == 0) q.push(i);
}
while (q.size())
{
int p = q.front(); q.pop();
cout << p << " ";
// 遍历p的孩子
for (auto& e : a[p])
{
// 删边
in[e]--;
// 把此时入度为0的顶点入队
if (in[e] == 0) q.push(e);
}
}
return 0;
}