#include<fstream>
#include<vector>
#include<cstring>
#define N 100100
using namespace std;
ifstream f("darb.in");
ofstream g("darb.out");
int i,n,x,y,maxi,care,d[N];
vector<int>v[N];
inline void dfs(int x,int t)
{
d[x]=d[t]+1;
for(vector<int>::iterator it=v[x].begin();it!=v[x].end();++it)
if(*it!=t)
{
dfs(*it,x);
}
}
int main()
{
f>>n;
for(i=1;i<n;++i)
{
f>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
dfs(1,0);
for(i=1;i<=n;++i)
if(d[i]>maxi)
care=i,maxi=d[i];
memset(d,0,sizeof(d));
dfs(care,0);
maxi=0;
for(i=1;i<=n;++i)
if(d[i]>maxi)
maxi=d[i];
g<<maxi<<'\n';
return 0;
}