#include<fstream>
#include<iostream>
#include<vector>
#define DN 21005
#define pb push_back
using namespace std;
ifstream fin("darb.in");
ofstream fout("darb.out");
int t,n,m,dp[DN],p,q,viz[DN],pr[DN],f,dp2[DN];
vector<int>v[DN];
void dfs(int nod)
{
viz[nod]=1;
int ma1=0,ma2=0;
for(auto i:v[nod])
if(viz[i]==0)
{
dp2[i]=1;
dfs(i);
dp2[nod]=max(dp2[nod],dp2[i]+1);
if(dp2[i]>ma1)
{
ma2=ma1;
ma1=dp2[i];
}
else
if(dp2[i]>ma2)
ma2=dp2[i];
}
dp[nod]=ma1+ma2+1;
}
int main()
{
t=1;
for(int h=1;h<=t;h++)
{
fin>>n;
m=n-1;
for(int i=1;i<=n;i++)
{
viz[i]=dp[i]=dp2[i]=0;
v[i].clear();
}
for(int i=1;i<=m;i++)
{
fin>>p>>q;
v[p].pb(q);
v[q].pb(p);
}
dp2[1]=1;
dfs(1);
fout<<dp[1]<<'\n';
}
}