#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> adj = {};
set<int> step(set<int> pos) {
  set<int> ans;
  for (int x : pos) {
    for (int y : adj[x]) ans.insert(y);
  }
  return ans;
}
int main() {
  int N, u, v;
  cin >> N >> u >> v;
  for (int i = 0; i < N - 1; i++) {
    int a, b;
    cin >> a >> b;
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  set<int> takahashi_pos;
  takahashi_pos.insert(u);
  set<int> aoki_pos;
  aoki_pos.insert(u);
  long long ans = 0;
  while (true) {
    takahashi_pos = step(takahashi_pos);
    set<int> possible;
    set_difference(takahashi_pos.begin(), takahashi_pos.end(), aoki_pos.begin(),
                   aoki_pos.end(), std::inserter(possible, possible.end()));
    if (possible.size() == 0) break;
    aoki_pos = step(aoki_pos);
    ans++;
    possible.clear();
    set_difference(takahashi_pos.begin(), takahashi_pos.end(), aoki_pos.begin(),
                   aoki_pos.end(), std::inserter(possible, possible.end()));
    if (possible.size() == 0) break;
  }
  cout << ans << endl;
  return 0;
}
