#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool used[100005];
vector<ll> node[100005];
ll T_dis[100005]={0},A_dis[100005]={0};
void dfs_T(ll pos,ll dis){
  T_dis[pos]=dis;
  for(int i=0;i<node[pos].size();i++){
    ll to=node[pos][i];
    if(!used[to]){
      used[to]=true;
      dfs_T(to,dis+1);
    }
  }
}
void dfs_A(ll pos,ll dis){
  A_dis[pos]=dis;
  for(int i=0;i<node[pos].size();i++){
    ll to=node[pos][i];
    if(!used[to]){
      used[to]=true;
      dfs_A(to,dis+1);
    }
  }
}
int main(){
  ll n,u,v;
  cin>>n>>u>>v;
  for(int i=1;i<n;i++){
    ll a,b;
    cin>>a>>b;
    node[a].push_back(b);
    node[b].push_back(a);
  }
  for(int i=0;i<=n;i++) used[i]=false;
  used[u]=true;
  dfs_T(u,0);
  for(int i=0;i<=n;i++) used[i]=false;
  used[v]=true;
  dfs_A(v,0);
  for(int i=0;i<=n;i++) used[i]=false;
  used[u]=true;
  dfs_G(u);
  ll ans=17441744;
  for(int i=1;i<=n;i++){
    if(T_dis[i]<A_dis[i]) ans=min(ans,A_dis[i]);
  }
  cout<<ans-1<<endl;
}
