#include<bits/stdc++.h>
using namespace std;
#define mst(x,y) memset(x,y,sizeof(x))
#define rep(x,y,z) for(int x=(y);(x)<(z);x++)
const int maxn=1e3+10;
int n,k,x;
int fa[maxn],cnt[maxn];
vector<int> ans;
int Find(int x){
return x==fa[x]?x:fa[x]=Find(fa[x]);
}
void Union(int x,int y){
int tx=Find(fa[x]),ty=Find(fa[y]);
fa[tx]=ty;
cnt[ty]+=cnt[tx];
return ;
}
int main(){
rep(i,0,maxn) fa[i]=i;
scanf("%d",&n);
rep(i,0,n){
scanf("%d: ",&k);
int pre=-1;
rep(j,0,k){
scanf("%d",&x);
if(pre!=-1) Union(pre,x);
pre=x;
}
pre=Find(fa[x]);
cnt[pre]++;
}
rep(i,0,maxn) if(fa[i]==i&&cnt[i])
ans.push_back(-cnt[i]);
sort(ans.begin(),ans.end());
cout<<ans.size()<<endl;
rep(i,0,ans.size()){
cout<<-ans[i];
if(i==ans.size()-1) cout<<"\n";
else cout<<" ";
}
return 0;
}