#include <fstream>
#include <vector>
#include <deque>
using namespace std;
ifstream fin("darb.in");
ofstream fout("darb.out");
vector<int> v[100000];
deque<int> cd;
int i,n,x,y,s[100001],nod,Max;
int main()
{
fin>>n;
for (i=1;i<n;i++)
{
fin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
cd.push_back(1);
while (cd.empty() == false)
{
for (vector<int>::iterator it = v[cd.front()].begin(); it != v[cd.front()].end(); ++it )
if (s[*it]==0)
s[*it]=1,cd.push_back(*it),nod=*it;
cd.pop_front();
}
for (i=1;i<=n;i++)
s[i]=0;
cd.push_back(nod);
while (cd.empty() == false)
{
for (vector<int>::iterator it = v[cd.front()].begin(); it != v[cd.front()].end(); ++it )
if (s[*it]==0)
s[*it]=s[cd.front()]+1,Max=s[*it],cd.push_back(*it);
cd.pop_front();
}
fout<<Max+1;
return 0;
}