#include <bits/stdc++.h>
using namespace std;
const int MAX = 1e5 + 10;
int d1[MAX], d2[MAX], d3[MAX];
bool v1[MAX], v2[MAX], v3[MAX];
vector<int> graph[MAX];
void dfs1(int u) {
  v1[u] = true;
  for (int i = 0; i < graph[u].size(); ++i) {
    int v = graph[u][i];
    if (!v1[v]) {
      d1[v] = d1[u] + 1;
      dfs1(v);
    }
  }
}
void dfs2(int u) {
  v2[u] = true;
  for (int i = 0; i < graph[u].size(); ++i) {
    int v = graph[u][i];
    if (!v2[v]) {
      d2[v] = d2[u] + 1;
      dfs2(v);
    }
  }
}
void dfs3(int u) {
  v3[u] = true;
  for (int i = 0; i < graph[u].size(); ++i) {
    int v = graph[u][i];
    if (!v3[v]) {
      d3[v] = d3[u] + 1;
      dfs3(v);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n, u, v;
  cin >> n >> u >> v;
  int a, b;
  for (int i = 0; i < n - 1; ++i) {
    cin >> a >> b;
    graph[a].push_back(b);
    graph[b].push_back(a);
  }
  dfs1(u);
  dfs2(v);
  int best = 0;
  for (int i = 1; i <= n; ++i) {
    if (d1[i] < d2[i]) {
      best = max(best, d1[i]);
    } else if (d1[i] == d2[i] and d1[i] == 1) {
      best = -1;
      break;
    }
  }
  if (best > 0) {
    dfs3(best);
    for (int i = 1; i <= n; ++i)
      if (d1[i] + d3[i] < d2[i]) {
        best = max(best, d1[i] + d3[i]);
      }
    cout << best << '\n';
  } else
    cout << -best << '\n';
  return 0;
}
