#include <cstdio>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int maxDistance=0;
vector<int> G[100001];
inline void AddEdge(int v,int s)
{
G[v].push_back(s);
G[s].push_back(v);
}
int LastOrder(int pre,int cur)
{
int first=0,second=0;
for(int i=0;i<G[cur].size();++i)
{
if(G[cur][i]==pre) continue;
int temp=LastOrder(cur,G[cur][i]);
if(temp>first)
{
second=first;
first=temp;
}
else if(temp>second) second=temp;
maxDistance=max(maxDistance,first+second);
return first+1;
}
}
int main()
{
int N;
scanf("%d",&N);
int Ai,Bi;
for(int i=1;i<N;++i)
{
scanf("%d%d",&Ai,&Bi);
AddEdge(Ai,Bi);
}
LastOrder(0,1);
printf("%d",maxDistance);
return 0;
}