#include<bits/stdc++.h>
using namespace std;
const int MAXN=102;
struct Node{
int id;
int level;
int flag;
vector<int> child;
}node[MAXN];
bool vis[MAXN];
int n,m;
void dfs(int u,int depth){
vis[u]=true;
node[u].level=depth;
if(node[u].child.size()==0)
node[u].flag=1;
for(int i=0;i<node[u].child.size();i++){
if(vis[node[u].child[i]]==false){
dfs(node[u].child[i],depth+1);
}
}
}
int main()
{
freopen("in.txt","r",stdin);
cin>>n>>m;
if(n==0) return 0;
fill(vis,vis+MAXN,false);
for(int i=0;i<m;i++){
int root,k;cin>>root>>k;
node[root].id=root;
for(int j=0;j<k;j++){
int temp;
cin>>temp;
node[root].child.push_back(temp);
node[root].flag=0;
}
}
int maxlevel=0;
int cnt[MAXN]={};
dfs(1,1);
queue<Node> q;
q.push(node[1]);
while(!q.empty()){
Node now=q.front();
q.pop();
if(now.flag==1){
cnt[now.level]++;
}
if(now.level>maxlevel) maxlevel=now.level;
if(now.child.size()!=0){
for(int i=0;i<now.child.size();i++){
q.push(node[now.child[i]]);
}
}
}
//for(int i=1;i<=2;i++)
//cout<<node[i].level<<endl;
for(int i=1;i<=maxlevel;i++){
if(i==1) cout<<cnt[i];
else cout<<' '<<cnt[i];
}
return 0;
}