#include <iostream>
using namespace std;
const int MAXN = 10000005;
struct Node
{
int parent;//保存父节点
int rank;//以此小男孩为父节点的人数
};
Node boy[MAXN];
void init(void)
{
int i;
for (i = 0; i < MAXN; i++)
{
boy[i].parent = i;
boy[i].rank = 1;
}
}
int find(int a)
{
int t;
t = boy[a].parent;
if (t != a)
{
boy[a].parent = find(t);
}
return boy[a].parent;
}
void Union(int a, int b)
{
int fa, fb;
fa = find(a);
fb = find(b);
if (fa != fb)
{
boy[fa].parent = fb;
boy[fb].rank += boy[fa].rank;
}
}
int Count()
{
int i;
int cnt = 0;
for (i = 0; i < MAXN; i++)
{
if (boy[i].parent == i)
{
if (boy[i].rank > cnt)
cnt = boy[i].rank;
}
}
return cnt;
}
int main(void)
{
int tcase;
int a, b;
while (scanf("%d", &tcase) != EOF)
{
init();
while (tcase--)
{
scanf("%d%d", &a, &b);
Union(a, b);
}
printf("%d\n", Count());
}
return 0;
}