#include <bits/stdc++.h>
#include <queue>
using namespace std;
int in[100010],n,m;
vector <int> v[100010],a[50010];
bool check(int x)
{
int cnt = 0,in2[100010] = {};
vector <int> v2[100010] = {};
queue <int> q2;
for (int i = 0 ; i < a[x].size() - 1 ; i++)
{
v2[a[x][i]].push_back(a[x][i + 1]);
in2[a[x][i + 1]]++;
}
for (int i = 1 ; i <= n ; i++)
{
if (in2[i] == 0) q2.push(i);
}
while (!q2.empty())
{
int tmp = q2.front();
cnt++;
q2.pop();
for (auto i : v2[tmp])
{
in2[i]--;
if (in2[i] == 0) q2.push(i);
}
}
return cnt == n;
}
int main()
{
cin >> n >> m;
for (int i = 1 ; i <= m ; i++)
{
int mm;
cin >> mm;
for (int j = 1 ; j <= mm ; j++)
{
int x;
cin >> x;
a[x].push_back(x);
}
}
int l = 1,r = m;
while (l < r)
{
int mid = (l + r + 1) / 2;
if (check(mid))
{
l = mid;
}
else
{
r = mid - 1;
}
}
for (int i = 1 ; i <= l ; i++)
{
for (int j = 0 ; j < a[i].size() - 1 ; j++)
{
v[a[i][j]].push_back(a[i][j + 1]);
}
}
priority_queue <int , vector <int> , greater <int>> q;
for (int i = 1 ; i <= n ; i++)
{
if (in[i] == 0)
{
q.push(i);
}
}
while (!q.empty())
{
int tmp = q.top();
cout << tmp << ' ';
q.pop();
for (auto i : v[tmp])
{
in[i]--;
if (in[i] == 0) q.push(i);
}
}
return 0;
}