#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
class A
{
public:
void init();
void run();
void output();
private:
enum{rid=1,N=100};
struct Arc
{
int index;
Arc *next;
};
void addchild(int fid,int cid);
Arc *tree[N];
int n,m;
};
void A::addchild(int fid,int cid)
{
Arc *child,*tmp=tree[fid];
child=new Arc;
child->index=cid;
child->next = tmp;
tree[fid]=child;
}
void A::init()
{
int fid,cid,cnum;
memset(tree,0,N*sizeof(Arc*));
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
{
scanf("%d%d",&fid,&cnum);
for(int j=0;j<cnum;j++)
{
scanf("%d",&cid);
addchild(fid,cid);
}
}
}
void A::run()
{
int cid,curcount,fnodecount,cnodecount;
Arc *tmp;
queue<int> qu;
if(tree[rid]==NULL)
{
printf("1");
}
else
{
printf("0");
qu.push(rid);
}
curcount=0;
fnodecount=1;
cnodecount=0;
while(!qu.empty())
{
cid=qu.front();
qu.pop();
fnodecount--;
tmp=tree[cid];
while(tmp!=NULL)
{
if(tree[tmp->index]==NULL) curcount++;
else {qu.push(tmp->index);cnodecount++;}
tmp=tmp->next;
}
if(fnodecount==0)
{
printf(" %d",curcount);
curcount=0;
fnodecount=cnodecount;
cnodecount=0;
}
}
}
int main()
{
// freopen("test.in","r",stdin);
// freopen("test.out","w",stdout);
A *a;
a=new A;
a->init();
a->run();
return 0 ;
}