#include <vector>
#include <fstream>
using namespace std;
ifstream cin ("darb.in");
ofstream cout ("darb.out");
vector<vector<int>> bla(100001);
vector<int> visited(100001), maxi1(100001), maxi2(100001);
int dfs(int inceput)
{
visited[inceput] = 1;
for(auto i : bla[inceput])
if(!visited[i])
{
int lungime = dfs(i);
if(lungime > maxi1[inceput]) maxi2[inceput] = maxi1[inceput], maxi1[inceput] = lungime;
else if(lungime > maxi2[inceput]) maxi2[inceput] = lungime;
}
return maxi1[inceput]+1;
}
int main()
{
int N, b, a;
cin >> N;
for(int i = 1; i < N; i++)
{
cin >> a >> b;
bla[a].push_back(b);
bla[b].push_back(a);
}
for(int i = 1; i < N; i++)
{
if(!bla[i].empty())
{
dfs(i);
}
}
int rasp= 0;
for(int i = 1; i <= N; i++)
{
rasp = max(rasp, maxi1[i] + maxi2[i]);
}
cout << rasp+1;
}