#include<iostream>
#include<vector>
using namespace std;

vector<int>tree[100000];
int depth_u[100000],depth_v[100000];
bool visited_u[100000],visited_v[100000];

void dfs(int v,int p,int cost,bool f){
    if(f){//u
        visited_u[v]=true;
        depth_u[v]=cost;
    }
    else{//v
        visited_v[v]=true;
        depth_v[v]=cost;
    }
    for(auto x:tree[v])if(x!=p)dfs(x,v,cost+1,f);
    return;
}
int main(){
    int n,u,v,a,b,ans=0;
    cin>>n>>u>>v;
    
    for(int i=1;i<n;i++){
        cin>>a>>b;
        tree[a-1].push_back(b-1);
        tree[b-1].push_back(a-1);
    }
    dfs(u-1,-1,0,true);dfs(v-1,-1,0,false);
    for(int i=0;i<n;i++){
        if(depth_u[i]<depth_v[i])ans=max(ans,depth_v[i]-1);
    }
    cout<<ans<<endl;
    return 0;
}