#include <bits/stdc++.h>
const int inf = (1 << 30);
const int mod = 1000000007;
using ll = long long;
using namespace std;
const int bound = 100010;
vector<int> graph[bound];
bool bscht[bound];
bool bscht_t[bound];
int u, v;
int ans = 0;
void dfs(int jetzt, int dist) {
  bscht[jetzt] = true;
  bool flag = true;
  for (auto naech : graph[jetzt]) {
    if (bscht[naech]) continue;
    flag = false;
    dfs(naech, dist + 1);
  }
  if (flag) {
    ans = max(ans, dist - 1);
  }
}
void init() {
  for (int i = 0; i < bound; ++i) {
    bscht[i] = true;
  }
}
void tkhs(int jetzt) {
  bscht[jetzt] = false;
  bscht_t[jetzt] = true;
  if (jetzt == v) return;
  for (auto naech : graph[jetzt]) {
    if (bscht_t[naech]) continue;
    tkhs(naech);
  }
}
int main() {
  int n;
  cin >> n >> u >> v;
  --u;
  --v;
  for (int i = 0; i < n - 1; ++i) {
    int a, b;
    cin >> a >> b;
    --a;
    --b;
    graph[a].push_back(b);
    graph[b].push_back(a);
  }
  init();
  tkhs(u);
  dfs(v, 0);
  cout << ans << endl;
}
