#include <bits/stdc++.h>
using namespace std;
multiset<int> st;
multiset<int>::iterator it;
vector<int> adj[600000];
void dfs(int u, int p, int h) {
  int sz = adj[u].size();
  if (sz == 1) st.insert(h);
  for (int i = 0; i < sz; i++) {
    int v = adj[u][i];
    if (v != p) dfs(v, u, h + 1);
  }
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  int ans = 0, sz = adj[1].size();
  for (int i = 0; i < sz; i++) {
    int v = adj[1][i];
    dfs(v, 1, 1);
    int an = 0;
    for (it = st.begin(); it != st.end(); it++) {
      if (*it <= an)
        an++;
      else
        an = *it;
    }
    st.clear();
    ans = max(ans, an);
  }
  printf("%d\n", ans);
}
