#include <bits/stdc++.h>
using namespace std;
vector<int> tre[100010];
int T[100010];
int A[100010];
__attribute__((constructor)) void initial() {
  cin.tie(0);
  ios::sync_with_stdio(false);
}
int main() {
  int N, u, v;
  cin >> N >> u >> v;
  for (int i = 0; N - 1 > i; i++) {
    int a, b;
    cin >> a >> b;
    tre[a].push_back(b);
    tre[b].push_back(a);
  }
  queue<pair<int, int> > t;
  t.push({u, 1});
  while (!t.empty()) {
    pair<int, int> k = t.front();
    t.pop();
    if (T[k.first]) {
      continue;
    }
    T[k.first] = k.second;
    k.second++;
    for (int i = 0; tre[k.first].size() > i; i++) {
      t.push({tre[k.first][i], k.second});
    }
  }
  queue<pair<int, int> > a;
  a.push({v, 1});
  while (!a.empty()) {
    pair<int, int> k = a.front();
    a.pop();
    if (A[k.first]) {
      continue;
    }
    A[k.first] = k.second;
    k.second++;
    for (int i = 0; tre[k.first].size() > i; i++) {
      a.push({tre[k.first][i], k.second});
    }
  }
  int ans = 0;
  int nya = N + 1;
  for (int i = 1; N >= i; i++) {
    if (T[i] < A[i]) {
      ans = max(ans, T[i]);
    } else if (T[i] == A[i] && nya > T[i]) {
      nya = T[i];
    }
  }
  if (nya != N + 1) {
    cout << max(ans - 1, nya - 1) << endl;
  } else {
    cout << ans - 1 << endl;
  }
}
