#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using ll = long long;
constexpr int INF = 1073741823;
constexpr int MINF = -1073741823;
constexpr ll LINF = ll(4661686018427387903);
constexpr ll MOD = 1000000007;
const double PI = acos(-1);
using namespace std;
void scans(string& str) {
  char c;
  str = "";
  scanf("%c", &c);
  if (c == '\n') scanf("%c", &c);
  while (c != '\n' && c != -1) {
    str += c;
    scanf("%c", &c);
  }
}
void scanc(char& str) {
  char c;
  scanf("%c", &c);
  if (c == -1) return;
  while (c == '\n') {
    scanf("%c", &c);
  }
  str = c;
}
double acot(double x) { return PI / 2 - atan(x); }
ll ans = 0;
int n, u, v;
bool ba = false;
void dfs(int now, vector<vector<int>>& graph, int count,
         vector<bool>& visited) {
  if (now == v - 1) {
    if (count <= 2) ba = true;
    return;
  }
  visited[now] = true;
  for (auto aa : graph[now]) {
    if (visited[aa])
      ans = max(ans, (ll)count);
    else
      dfs(aa, graph, count + 1, visited);
  }
  return;
}
int main() {
  scanf("%d%d%d", &n, &u, &v);
  vector<vector<int>> graph(n);
  int a, b;
  for (int i = 0; i < (n - 1); ++i) {
    scanf("%d%d", &a, &b);
    graph[a - 1].push_back(b - 1);
    graph[b - 1].push_back(a - 1);
  }
  vector<bool> visited(n);
  dfs(u - 1, graph, 0, visited);
  if (ba) --ans;
  printf("%lld\n", max(ans, 0LL));
  return 0;
}
