#include <bits/stdc++.h>
using namespace std;
int n, u[2];
vector<vector<int> > edg;
vector<int> dst[3];
void f(int x, int v) {
  for (int i = 0; i < edg[v].size(); i++) {
    int w = edg[v][i];
    if (dst[x][w] != -1) continue;
    dst[x][w] = dst[x][v] + 1;
    f(x, w);
  }
}
void g(int x, int v) {
  for (int i = 0; i < edg[v].size(); i++) {
    int w = edg[v][i];
    if (w == x || dst[2][w] == -2) continue;
    dst[2][w] = -2;
    g(x, w);
  }
}
int main(void) {
  cin >> n >> u[0] >> u[1];
  edg.assign(n, vector<int>());
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    edg[a].push_back(b);
    edg[b].push_back(a);
  }
  for (int i = 0; i < 2; i++) {
    dst[i].assign(n, -1);
    dst[i][--u[i]] = 0;
    f(i, u[i]);
  }
  if (dst[0][0] % 2 == dst[1][0] % 2) {
    int x = 0;
    for (int i = 0; i < n; i++) {
      if (dst[0][i] == dst[1][i]) {
        x = i;
        break;
      }
    }
    dst[2].assign(n, -1);
    dst[2][u[1]] = -2;
    dst[2][x] = 0;
    g(x, u[1]);
    f(2, x);
    int mx = 0;
    for (int i = 0; i < n; i++) {
      if (mx < dst[2][i]) mx = dst[2][i];
    }
    cout << dst[0][x] + mx - 1 << endl;
  } else {
    int ans = 0;
    for (int i = 0; i < n; i++) {
      int fu = dst[0][i];
      int fv = dst[1][i];
      if (fu < fv && ans < fu) {
        ans = fu;
      }
    }
    cout << ans << endl;
  }
}
