#include <bits/stdc++.h>
using namespace std;
const long double EPS = 1e-9;
const long double PI = acos(-1);
int mod = (int)998244353;
const int MOD7 = 1000000007;
const int MOD9 = 1000000009;
const int a228 = 18;
const long long kekmod = 1791791791;
const long long bestmod = 1148822869;
const long long secmod = (int)1e9 + 113;
vector<long long> mods = {kekmod, bestmod, mod, MOD9, 1000000007};
vector<long long> hashpows = {29, 31, 37, 43, 47, 53, 179, 229};
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count() +
            228 + 'i' + 'q' + 1337 + 1488);
const int MAXN = 2e5 + 1;
vector<vector<int>> g(MAXN);
vector<int> bfs(int v) {
  vector<int> d(MAXN, 1e9);
  queue<int> q;
  q.push(v);
  d[v] = 0;
  while (q.size()) {
    int u = q.front();
    q.pop();
    for (int i : g[u]) {
      if (d[i] > d[u] + 1) {
        d[i] = d[u] + 1;
        q.push(i);
      }
    }
  }
  return d;
}
signed main() {
  ios_base::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);
  srand(time(NULL));
  int x, y;
  int n;
  cin >> n >> x >> y;
  for (int i = 0; i < n - 1; ++i) {
    int a, b;
    cin >> a >> b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  vector<int> d1 = bfs(y);
  vector<int> d2(MAXN, 1e9);
  queue<int> q;
  d2[x] = 0;
  q.push(x);
  while (q.size()) {
    int v = q.front();
    q.pop();
    if (d1[v] == d2[v]) continue;
    for (int i : g[v]) {
      if (d2[i] > d2[v] + 1) {
        d2[i] = d2[v] + 1;
        q.push(i);
      }
    }
  }
  int ans = 0;
  for (int i = 1; i <= n; ++i) {
    if (d1[i] == d2[i]) {
      ans = max(ans, d1[i]);
    }
    if (d1[i] > d2[i]) {
      if ((d1[i] % 2 != d2[i] % 2) || d1[i] == d2[i] + 2) {
        ans = max(ans, d1[i] - 1);
      } else {
        ans = max(ans, d1[i]);
      }
    }
  }
  cout << ans;
}
