#include<iostream>
#include<vector>
#include<queue>
using namespace std;

vector<long long int> v[10009];
int max_size=0;
bool visited[10009];
int level[10009]={0};

int bfs(int root)
{
	int last_element;
	queue<int> q;
	q.push(root);
	visited[root]=true;
	level[root]=0;
	while(!q.empty())
	{
		int currNode=q.front();
		//cout << q.front() << "  ";
		q.pop();
		for(int j=0;j<v[currNode].size();j++)
		{
			if(visited[v[currNode][j]]==0)
			{
				level[v[currNode][j]]=level[currNode]+1;
				q.push(v[currNode][j]);
				visited[v[currNode][j]]=true;
			}
		}
		last_element=currNode;
	}
	return last_element;
}

int main()
{
	long long int nodes,x,y;
	cin>>nodes;
	for(long long int i=1;i<=nodes-1;i++)
	{
		cin>>x>>y;
		v[x].push_back(y);
		v[y].push_back(x);
	}
    int last_element1=bfs(1);
    //int x1=level[last_element1];
    //cout << "\nx1=" << x1 << ", level=" << level[last_element1] << "\n";
    for(int i=0;i<10009;i++)
	{
		level[i]=0;
		visited[i]=0;
	}

    int last_element2=bfs(last_element1);
    int x2=level[last_element2];
    //cout << "x1=" << x1 << ", level=" << level[last_element2] << "\n";
    cout << x2 << "\n";
}
