#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vii;
typedef vector<pll> vll;
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
#define ordered_multiset tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update>
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define ff first
#define ss second
#define mp make_pair
const int N = 2e5 + 1;
int podd[N], odw[N];
vi graf[N], zb;
int wyn = 0;
void dfs_podd(int v, int ojc){
podd[v] = 1;
for(int u : graf[v]){
if(odw[u] || u == ojc) continue;
dfs_podd(u, v);
podd[v] += podd[u];
}
}
int znajdz(int v, int ojc, int r){
for(int u : graf[v]){
if(odw[u] || u == ojc) continue;
if(podd[u] > r / 2) return znajdz(u, v, r);
}
return v;
}
int zbierz(int v, int ojc, ll odl){
int nodl = odl + graf[v].size() - 2;
int w = nodl;
for(int u : graf[v]){
if(u == ojc || odw[u]) continue;
w = max(w, zbierz(u, v, nodl));
}
return w;
}
void decompose(int v){
dfs_podd(v, 0);
int r = podd[v];
int c = znajdz(v, 0, r);
int best = 0;
for(int u : graf[c]){
int akt = zbierz(u, c, 0);
wyn = max(wyn, akt + best + int(graf[c].size()));
best = max(akt, best);
}
odw[c] = 1;
for(int u : graf[c]){
if(odw[u]) continue;
decompose(u);
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n; cin >> n;
for(int i = 1; i < n; i++){
int a, b; cin >> a >> b;
graf[a].pb(b); graf[b].pb(a);
}
decompose(1);
cout << wyn << "\n";
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiBwYWlyPGxsLCBsbD4gcGxsOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3RvcjxsbD4gdmw7CnR5cGVkZWYgdmVjdG9yPHBpaT4gdmlpOwp0eXBlZGVmIHZlY3RvcjxwbGw+IHZsbDsKI2RlZmluZSBvcmRlcmVkX3NldCB0cmVlPGludCwgbnVsbF90eXBlLCBsZXNzPGludD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+CiNkZWZpbmUgb3JkZXJlZF9tdWx0aXNldCB0cmVlPGludCwgbnVsbF90eXBlLCBsZXNzX2VxdWFsPGludD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+CiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCh4KS5lbmQoKQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGZmIGZpcnN0CiNkZWZpbmUgc3Mgc2Vjb25kCiNkZWZpbmUgbXAgbWFrZV9wYWlyCgpjb25zdCBpbnQgTiA9IDJlNSArIDE7CmludCBwb2RkW05dLCBvZHdbTl07CnZpIGdyYWZbTl0sIHpiOwoKaW50IHd5biA9IDA7Cgp2b2lkIGRmc19wb2RkKGludCB2LCBpbnQgb2pjKXsKICAgIHBvZGRbdl0gPSAxOwogICAgZm9yKGludCB1IDogZ3JhZlt2XSl7CiAgICAgICAgaWYob2R3W3VdIHx8IHUgPT0gb2pjKSBjb250aW51ZTsKICAgICAgICBkZnNfcG9kZCh1LCB2KTsKICAgICAgICBwb2RkW3ZdICs9IHBvZGRbdV07CiAgICB9Cn0KCmludCB6bmFqZHooaW50IHYsIGludCBvamMsIGludCByKXsKICAgIGZvcihpbnQgdSA6IGdyYWZbdl0pewogICAgICAgIGlmKG9kd1t1XSB8fCB1ID09IG9qYykgY29udGludWU7CiAgICAgICAgaWYocG9kZFt1XSA+IHIgLyAyKSByZXR1cm4gem5hamR6KHUsIHYsIHIpOwogICAgfQogICAgcmV0dXJuIHY7Cn0KCmludCB6YmllcnooaW50IHYsIGludCBvamMsIGxsIG9kbCl7CiAgICBpbnQgbm9kbCA9IG9kbCArIGdyYWZbdl0uc2l6ZSgpIC0gMjsKICAgIGludCB3ID0gbm9kbDsKICAgIGZvcihpbnQgdSA6IGdyYWZbdl0pewogICAgICAgIGlmKHUgPT0gb2pjIHx8IG9kd1t1XSkgY29udGludWU7CiAgICAgICAgdyA9IG1heCh3LCB6YmllcnoodSwgdiwgbm9kbCkpOwogICAgfQogICAgcmV0dXJuIHc7Cn0KCgp2b2lkIGRlY29tcG9zZShpbnQgdil7CiAgICBkZnNfcG9kZCh2LCAwKTsKICAgIGludCByID0gcG9kZFt2XTsKICAgIGludCBjID0gem5hamR6KHYsIDAsIHIpOwogICAgaW50IGJlc3QgPSAwOwogICAgZm9yKGludCB1IDogZ3JhZltjXSl7CiAgICAgICAgaW50IGFrdCA9IHpiaWVyeih1LCBjLCAwKTsKICAgICAgICB3eW4gPSBtYXgod3luLCBha3QgKyBiZXN0ICsgaW50KGdyYWZbY10uc2l6ZSgpKSk7CiAgICAgICAgYmVzdCA9IG1heChha3QsIGJlc3QpOwogICAgfQoKICAgIG9kd1tjXSA9IDE7CiAgICBmb3IoaW50IHUgOiBncmFmW2NdKXsKICAgICAgICBpZihvZHdbdV0pIGNvbnRpbnVlOwogICAgICAgIGRlY29tcG9zZSh1KTsKICAgIH0KCn0KCmludCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCiAgICBpbnQgbjsgY2luID4+IG47CiAgICBmb3IoaW50IGkgPSAxOyBpIDwgbjsgaSsrKXsKICAgICAgICBpbnQgYSwgYjsgY2luID4+IGEgPj4gYjsKICAgICAgICBncmFmW2FdLnBiKGIpOyBncmFmW2JdLnBiKGEpOwogICAgfQoKICAgIGRlY29tcG9zZSgxKTsKCgogICAgY291dCA8PCB3eW4gPDwgIlxuIjsKCgoKICAgIHJldHVybiAwOwp9