from collections import deque

N,u,v=map(int,input().split()) # u,vから1を引く必要がある
a=[[] for _ in range(N)] # 0-initial
for _ in range(N-1):
    Ai,Bi=map(int,input().split())
    a[Ai-1].append(Bi-1)
    a[Bi-1].append(Ai-1)
T=u-1;A=v-1

# 方針
# Tは，Tからの距離dTがAからの距離dA以上であるような点のうち，最もdAが大きい点を目指す。
dT=[None]*N
qT=deque()
qT.append(T);dT[T]=0
while qT:
    u=qT.popleft()
    for v in a[u]:
        if dT[v] is None:
            dT[v]=dT[u]+1
            qT.append(v)

dA=[None]*N
qA=deque()
qA.append(A);dA[A]=0
while qA:
    u=qA.popleft()
    for v in a[u]:
        if dA[v] is None:
            dA[v]=dA[u]+1
            qA.append(v)   

dis=dA[T]
'''
print(a)
print(dT)
print(dA)
'''
l=[i for i in range(N) if dT[i]<=dA[i]]
MdA=max([dA[i] for i in range(N) if i in l])
g=dA.index(MdA) # Tが目指すべきゴール

kT=dT[g] # Tが到達に要する手数
kA=dA[g] # Aが到達に要する手数
# print(g)
# print(kT,kA)
# print(dis)
if kT==kA and dis<=kT:
    ans=dis//2
else:
    ans=kT+max(kA-kT-1,0)

print(ans)