Cod sursa(job #148153)
#include<stdio.h>
#define N 100001
int n,m,*a[N],niv[N],viz[N];
struct vec
{
int x,y;
}v[N];
void read()
{
int i;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&v[i].x,&v[i].y);
niv[v[i].x]++;
niv[v[i].y]++;
}
for(i=1;i<=n;i++)
{
a[i]=new int[niv[i]+1];
a[i][0]=0;
}
for(i=1;i<=m;i++)
{
a[v[i].x][++a[v[i].x][0]]=v[i].y;
a[v[i].y][++a[v[i].y][0]]=v[i].x;
}
}
void df(int nod,int nr)
{
int i;
viz[nod]=nr;
for(i=1;i<=a[nod][0];i++)
if(!viz[a[nod][i]])
df(a[nod][i],nr);
}
void solve()
{
int i,max,nr=1;
for(i=1;i<=n;i++)
if(!viz[i])
{
df(i,nr);
nr++;
}
max=viz[1];
for(i=2;i<=n;i++)
if(viz[i]>max)
max=viz[i];
printf("%d\n",max);
}
int main()
{
freopen("dfs.in","r",stdin);
freopen("dfs.out","w",stdout);
read();
solve();
return 0;
}