#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<map>
#include<unordered_map>
using namespace std;
struct btree {
vector<int> child;
int l;
}node[110];
int leaf[110], maxh = -1;
void bfs(int s) {
queue<int> q;
q.push(s);
int cnt = 0;
int lastl = -1;
while (!q.empty()) {
int top = q.front();
q.pop();
if (node[top].child.size() == 0 && node[top].l == lastl) cnt++;
if (node[top].l != lastl && node[top].l != 0) {
cout << cnt<<" ";
cnt = 0;
if (node[top].child.size() == 0) cnt++;
lastl = node[top].l;
}
for (int i = 0; i < node[top].child.size(); ++i) {
int child = node[top].child[i];
node[child].l = node[top].l + 1;
q.push(child);
}
}
cout << cnt;
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
for (int i = 0; i < m; ++i) {
int indx, k;
cin >> indx >> k;
while (k--) {
int key;
cin >> key;
node[indx].child.push_back(key);
}
}
node[1].l = 0;
if (n == 1) cout << 1;
else bfs(1);
return 0;
}