int n,m,k;
int a[1010],f[1010];
void cf(int x)
{
for(int i=1;i<=k;i++)f[i]*=x;
for(int i=1;i<=k;i++)
{
if(f[i]>=10)
{
f[i+1]+=f[i]/10;
f[i]%=10;
if(i==k)k++;
}
}
while(f[k]==0&&k>1)k--;
}
int main()
{
scanf("%d",&n);
m=0;
for(int i=2;i;i++)
{
if(n>=i){a[++m]=i;n-=i;}
else break;
}
while(n)
{
for(int i=m;i>=1;i--)
{
if(n){a[i]++;n--;}
else break;
}
}
k=1;f[1]=1;
for(int i=1;i<=m;i++)cf(a[i]);
for(int i=k;i>=1;i--)printf("%d",f[i]);
return 0;
}
int n,m,fa[1001],v[1001];
int findfa(int x)
{
if(x==fa[x]) return x;
return fa[x]=findfa(fa[x]);
}
void change(int x,int y)
{
int a=findfa(x),b=findfa(y);
fa[a]=b;
}
int main()
{
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
fa[i]=i;
v[i]=0;
}
for(int i=1;i<=m;i++)
{
int a,b; scanf("%d %d",&a,&b);
change(a,b);
}
int max=0;
for(int i=1;i<=n;++i)
{
int x=findfa(fa[i]);
if(++v[x]>max) max=v[x];
}
printf("%d",max);
return 0;
}
并查集