#include <bits/stdc++.h>
using namespace std;
constexpr auto MOD = 1000000007;
constexpr int INF = 1e9;
constexpr long long LINF = 1e18;
string s;
long long n, m, u, v;
vector<int> mem[100010];
bool chk[100010];
int dst[100010];
void dfs(int a, int depth) {
  chk[a] = 1;
  dst[a] = depth;
  for (int i = 0; i < mem[a].size(); i++) {
    if (!chk[mem[a][i]]) dfs(mem[a][i], depth + 1);
  }
}
void pnt(int a) {
  dst[a] = 0;
  for (int i = 0; i < mem[a].size(); i++) {
    if (dst[mem[a][i]] <= dst[a]) continue;
    if (dst[mem[a][i]] > dst[u] / 2) continue;
    pnt(mem[a][i]);
  }
}
int main() {
  cin >> n >> u >> v;
  int a, b;
  for (int i = 0; i < n - 1; i++) {
    cin >> a >> b;
    mem[a].push_back(b);
    mem[b].push_back(a);
  }
  dst[v] = 0;
  dfs(v, 0);
  pnt(v);
  int mx = 0;
  for (int i = 0; i < n; i++) {
    mx = max(mx, dst[i + 1]);
  }
  cout << mx - 1 << endl;
}
