#include <bits/stdc++.h>
using namespace std;
vector<int> v[1000000];
vector<int> temp;
void dfs(int node, int p, int h) {
  if (v[node].size() == 1) temp.push_back(h);
  for (int i = 0; i < v[node].size(); i++) {
    if (v[node][i] == p) continue;
    dfs(v[node][i], node, h + 1);
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int x, y;
    cin >> x >> y;
    v[x].push_back(y);
    v[y].push_back(x);
  }
  int ans = 0;
  for (int i = 0; i < v[1].size(); i++) {
    dfs(v[1][i], 1, 0);
    sort(temp.begin(), temp.end());
    for (int i = 1; i < temp.size(); i++) {
      temp[i] = max(temp[i], temp[i - 1] + 1);
    }
    ans = max(ans, temp[temp.size() - 1]);
    temp.clear();
  }
  cout << ans + 1;
}
