并查集。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int n=1e3+11;
int a,b,c,d[n],w[n];
char r;
int find(int x)
{
if(d[x]!=x) d[x]=find(d[x]);
return d[x];
}
vector<int>t[n];
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>a;
for(int i=1;i<=a;i++)
{
d[i]=i;
w[i]=1;
}
for(int i=1;i<=a;i++)
{
cin>>b>>r;
for(int j=1;j<=b;j++)
{
cin>>c;
t[c].push_back(i);
}
}
for(int i=1;i<=1000;i++)
{
int s=0,v;
for(int j:t[i])
{
if(s==0)
{
v=find(j);
s=1;
}
else
{
int p=find(j);
d[p]=v;
w[v]+=w[p];
}
}
}
int an=0;
vector<int>g;
for(int i=1;i<=a;i++)
{
if(find(i)==i)
{
an++;
g.push_back(w[i]);
}
}
cout<<an<<endl;
sort(g.begin(),g.end());
for(int i=g.size()-1;i>0;i--)
{
cout<<g[i]<<" ";
}
cout<<g[0];
}