#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 100;
int n, ans, f[N], g[N];
vector<int> nei[N];
void input() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    nei[--u].push_back(--v);
    nei[v].push_back(u);
  }
}
void dfs(int v = 0, int par = -1) {
  int cnt = 0;
  pair<int, int> F1 = pair<int, int>(0, -1), F2 = F1, G1 = F1, G2 = F1;
  for (int u : nei[v])
    if (u ^ par) {
      dfs(u, v);
      F2 = max(F2, pair<int, int>(f[u], u));
      if (F2 > F1) swap(F1, F2);
      G2 = max(G2, pair<int, int>(g[u], u));
      if (G2 > G1) swap(G1, G2);
      cnt++;
    }
  f[v] = max(0, G1.first) + 1;
  g[v] = max(0, max(F1.first, G1.first) + cnt - 1);
  int CNT = nei[v].size();
  ans = max({ans, G1.first + G2.first + max(1, CNT - 2),
             F1.first + F2.first + CNT - 2, f[v], g[v]});
  if (F1.second != G1.second)
    ans = max(ans, F1.first + G1.first + CNT - 2);
  else
    ans = max(
        {ans, F1.first + G2.first + CNT - 2, F2.first + G1.first + CNT - 2});
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  input();
  dfs();
  cout << ans;
}
