#include <bits/stdc++.h>
#include <iomanip>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
using namespace std;
#define ll long long
#define pb push_back
#define all(a) a.begin(),a.end()
#define death ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
////////////////////////////////////global variables//////////////////////////////////////////////////
map<int ,vector<int>> adj;
map<int, bool> vis;
int farLeaf;
int maxdis;
////////////////////////////////////recursion/////////////////////////////////////////////////////////
/////////////////////////////////////functions///////////////////////////////////////////////////////
bool isLeaf(int node) {
return adj[node].size() == 1;
}
void dfs(ll num,int dis){
if (maxdis < dis) {
maxdis = dis;
farLeaf=num;
}
vis[num] = true;
for (auto ch:adj[num]) {
if (!vis[ch]) {
dfs(ch,dis+1);
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void neverland() {
int n; cin>>n;
vis.clear();
for (int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
adj[x].pb(y);
adj[y].pb(x);
}
dfs(1,0);
dfs(farLeaf,0);
cout<<maxdis<<endl;
}
int main() {
death;
long long t=1;
// cin>>t;
while(t--){
neverland();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKI2RlZmluZSBvcmRlcmVkX3NldCB0cmVlPGludCwgbnVsbF90eXBlLCBsZXNzPGludD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgYWxsKGEpICBhLmJlZ2luKCksYS5lbmQoKQojZGVmaW5lIGRlYXRoIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL2dsb2JhbCB2YXJpYWJsZXMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwptYXA8aW50ICx2ZWN0b3I8aW50Pj4gYWRqOwptYXA8aW50LCBib29sPiB2aXM7CmludCBmYXJMZWFmOwppbnQgbWF4ZGlzOwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9yZWN1cnNpb24vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9mdW5jdGlvbnMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmJvb2wgaXNMZWFmKGludCBub2RlKSB7CiAgICByZXR1cm4gYWRqW25vZGVdLnNpemUoKSA9PSAxOwp9CnZvaWQgZGZzKGxsIG51bSxpbnQgZGlzKXsKICAgICAgICBpZiAobWF4ZGlzIDwgZGlzKSB7CiAgICAgICAgICAgIG1heGRpcyA9IGRpczsKICAgICAgICAgICAgZmFyTGVhZj1udW07CiAgICAgICAgfQogICAgdmlzW251bV0gPSB0cnVlOwogICAgZm9yIChhdXRvIGNoOmFkaltudW1dKSB7CiAgICAgICAgaWYgKCF2aXNbY2hdKSB7CiAgICAgICAgICAgIGRmcyhjaCxkaXMrMSk7CiAgICAgICAgfQogICAgfQp9Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgp2b2lkIG5ldmVybGFuZCgpIHsKICAgIGludCBuOyBjaW4+Pm47CiAgICB2aXMuY2xlYXIoKTsKICAgIGZvciAoaW50IGk9MTtpPG47aSsrKQogICAgewogICAgICAgIGludCB4LHk7CiAgICAgICAgY2luPj54Pj55OwogICAgICAgIGFkalt4XS5wYih5KTsKICAgICAgICBhZGpbeV0ucGIoeCk7CiAgICB9CiAgICBkZnMoMSwwKTsKICAgIGRmcyhmYXJMZWFmLDApOwogICAgY291dDw8bWF4ZGlzPDxlbmRsOwp9CmludCBtYWluKCkgewogICAgZGVhdGg7CiAgICBsb25nIGxvbmcgdD0xOwogICAgLy8gY2luPj50OwogICAgd2hpbGUodC0tKXsKICAgICAgICBuZXZlcmxhbmQoKTsKICAgIH0KfQ==