#include <bits/stdc++.h>
using namespace std;

#define rep(i, n) for (ll i = 0; i < (ll)(n); i++)
#define rept(i,k,n) for(int i = (k); i < (int)(n); i++)
#define Sort(v) sort(v.begin(),v.end())
#define Reverse(v) reverse(v.begin(),v.end())
#define F first
#define S second

typedef long long ll;
typedef pair<double,double> Pdd;
typedef pair<int,int> Pii;

int n;
vector<vector<int> > tree;

void dfs(int s,int p,int l,vector<int> &f){
    f[s]=l;
    for(int x:tree[s]){
        if(x==p) continue;
        dfs(x,s,l+1,f);
    }
    return;
}

int main(){
    cin>>n;
    int u,v;
    cin>>u>>v;
    u--;v--;
    tree.assign(n,vector<int> (0));
    rep(i,n-1){
        int a,b;
        cin>>a>>b;a--;b--;
        tree[a].push_back(b);
        tree[b].push_back(a);
    }
    vector<int> fu(n);
    vector<int> fv(n);
    dfs(u,-1,0,fu);
    dfs(u,-1,0,fv);
    int maxu=0,maxv=0;
    rep(i,n){
        if(fu[i]<fv[i]&&){
            maxu=max(maxu,fv[i]);
        }
    }
    cout<<maxu<<endl;
    return 0;
}