#include <bits/stdc++.h>
using namespace std;
const int maxn = 200010;
int head[maxn], ver[maxn * 2], Next[maxn * 2], tot, n, f[maxn][2][3], ans;
void add(int x, int y) { ver[++tot] = y, Next[tot] = head[x], head[x] = tot; }
inline void chkmax(int &x, int y) { x = max(x, y); }
void dfs(int x, int pa) {
  f[x][1][2] = 1;
  for (int i = head[x]; i; i = Next[i])
    if (ver[i] != pa) {
      int y = ver[i];
      dfs(ver[i], x);
      chkmax(f[x][1][0], f[x][1][2] + f[y][0][0]);
      chkmax(f[x][1][0], f[x][1][1] + max(f[y][0][1], f[y][0][2]));
      chkmax(f[x][1][1], f[x][1][2] + max(f[y][0][1], f[y][0][2]));
      chkmax(f[x][0][0], f[x][0][0] + f[y][1][2]);
      chkmax(f[x][0][0], f[x][0][1] + max(max(f[y][0][1], f[y][0][2]),
                                          max(f[y][1][1], f[y][1][2])));
      chkmax(f[x][0][1], f[x][0][1] + f[y][1][2]);
      chkmax(f[x][0][1], f[x][0][2] + max(max(f[y][0][1], f[y][0][2]),
                                          max(f[y][1][1], f[y][1][2])));
      chkmax(f[x][0][2], f[x][0][2] + f[y][1][2]);
    }
  chkmax(ans, max(max(f[x][0][1], f[x][0][0]), max(f[x][1][1], f[x][1][0])));
  chkmax(ans, max(f[x][0][2], f[x][1][2]));
}
int main() {
  scanf("%d", &n);
  int x, y;
  for (int i(2), i_END(n); i <= i_END; i++)
    scanf("%d%d", &x, &y), add(x, y), add(y, x);
  dfs(1, 0);
  printf("%d\n", ans);
  return 0;
}
