#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
//解题思路:
//题意是求每一层没有子树的节点个数,即每层的叶子节点个数,dfs深搜即可
inline void read(int &x)
{
register int f = 1;
x = 0;
char c = getchar();
while(c > '9' || c < '0')
{
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9')
{
x = (x << 3) + (x << 1) + (c ^ 48);
c = getchar();
}
x *= f;
}
vector<int> mp[1005];
int ans[1005], mx(1);
//mx为最大深度,需要设为一,否则只有一个节点时,这样深度还没更新就退出了
//len是当前深度
void dfs(int u, int lev)
{
if(!mp[u].size())
{
// 没有子节点则该层叶子节点个数加一
ans[lev]++;
return;
}
mx = max(lev + 1, mx);
for(int i = 0; i < mp[u].size(); i++)
{
dfs(mp[u][i], lev + 1);
}
}
int main()
{
int n, m;
read(n); read(m);
if(!n) return 0;
// 建树
for(int root, k, i = 1;i <= m; i++)
{
read(root); read(k);
for(int t, j = 1; j <= k; j++)
{
read(t);
mp[root].push_back(t);
}
}
dfs(1, 1);
// 输出结果
for(int i = 1; i <= mx; i++)
{
if(i != mx)
printf("%d ", ans[i]);
else printf("%d\n", ans[i]);
}
return 0;
}