#include <bits/stdc++.h>
using namespace std;
int main() {
  int N, us, vs;
  cin >> N >> us >> vs;
  us--;
  vs--;
  vector<vector<int>> edge(N, vector<int>());
  for (int i = 0; i < N - 1; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    edge[a].push_back(b);
    edge[b].push_back(a);
  }
  vector<set<int>> u(2), v(2), vv(2);
  u[0].clear();
  v[0].clear();
  vv[0].clear();
  u[1].clear();
  v[1].clear();
  vv[1].clear();
  u[0].insert(us);
  v[0].insert(vs);
  vv[0].insert(vs);
  int p = 0;
  do {
    u[(p + 1) % 2].clear();
    for (int i : u[p % 2]) {
      for (int j : edge[i]) {
        if (v[p % 2].count(j) == 0) u[(p + 1) % 2].insert(j);
      }
    }
    if (u[(p + 1) % 2].size() == 0) continue;
    for (int i : vv[p % 2]) {
      for (int j : edge[i]) {
        if (v[(p + 1) % 2].count(j) == 0) {
          v[(p + 1) % 2].insert(j);
          vv[(p + 1) % 2].insert(j);
        }
        if (u[(p + 1) % 2].count(j) > 0) u[(p + 1) % 2].erase(j);
      }
    }
    vv[p % 2].clear();
    p++;
  } while (u[p % 2].size() * u[(p + 1) % 2].size() > 0);
  cout << p << endl;
}
