#include <bits/stdc++.h>
using namespace std;
const int INF = 1 << 30;
const long long INFL = 1LL << 62;
const int MOD = 1000000007;
const int MAX = 100010;
const int N = 100;
int d[MAX], f[MAX], d2[MAX], d3[MAX];
vector<int> G[MAX];
int main() {
  int n, u, v;
  cin >> n >> u >> v;
  u--;
  v--;
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    G[a].push_back(b);
    G[b].push_back(a);
    d[i] = INF;
    d2[i] = INF;
    d3[i] = INF;
  }
  d[n - 1] = d2[n - 1] = d3[n - 1] = INF;
  stack<int> S;
  S.push(u);
  d[u] = 0;
  while (!S.empty()) {
    int a = S.top();
    S.pop();
    for (auto b : G[a]) {
      if (d[b] > d[a] + 1) {
        S.push(b);
        d[b] = d[a] + 1;
        f[b] = a;
      }
    }
  }
  vector<int> ng;
  int tmp = v;
  for (int i = 0; i < (d[v] + 1) / 2; i++) {
    ng.push_back(tmp);
    tmp = f[tmp];
  }
  for (auto i : ng) d2[i] = -1;
  S.push(u);
  d2[u] = 0;
  while (!S.empty()) {
    int a = S.top();
    S.pop();
    for (auto b : G[a]) {
      if (d2[b] == -1) continue;
      if (d2[b] > d2[a] + 1) {
        S.push(b);
        d2[b] = d2[a] + 1;
      }
    }
  }
  S.push(v);
  d3[v] = 0;
  while (!S.empty()) {
    int a = S.top();
    S.pop();
    for (auto b : G[a]) {
      if (d3[b] > d3[a] + 1) {
        S.push(b);
        d3[b] = d3[a] + 1;
      }
    }
  }
  int max_i = -1, max_d = 0;
  for (int i = 0; i < n; i++) {
    if (d2[i] != INF && max_d < d2[i]) {
      max_d = d2[i];
      max_i = i;
    }
  }
  cout << max(0, d3[max_i] - 1) << endl;
}
