from sys import stdin
input=stdin.readline
n,u,v=map(int,input().split())
tree={}
for i in range(n-1):
    an,bn=map(int,input().split())
    #双方向に辺生成
    tree.setdefault(an,[]).append(bn)
    tree.setdefault(bn,[]).append(an)
    
def trelen(x,y):#tree内のx→yの最短距離
    dist=[-1]*(n+1)
    stack=[]
    stack.append(x)
    dist[x]=0
    while stack:
        label=stack.pop(-1)
        for i in tree[label]:
            if dist[i]==-1:
                dist[i]=dist[label]
                stack+=[i]
            if i==y:
                return dist[y]
    

count=0#vの移動回数
while(u!=v):
    umove=tree[u]
    vmove=tree[v]
    
    #uの行動
    if u==v:
        break
    
    if len(umove)==1:#辺が1つしかないときはそこを移動するしかない
        u=umove[0]
    else:
        dist=0
        move=umove[0]
        for i in range(len(umove)):
            d=trelen(v,umove[i])
            if dist<d:
                dist=d
                move=umove[i]
        u=move
                
        
    
    
    
    #vの行動
    if u==v:
        break
    
    if len(vmove)==1:#辺が1つしかないときはそこを移動するしかない
        v=vmove[0]
        count+=1
    else:
        dist=1000000
        move=vmove[0]
        for i in range(len(vmove)):
            d=trelen(v,vmove[i])
            if dist>d:
                dist=d
                move=vmove[i]
        v=move
        count+=1
        
    
    
print(count)