N,U,V = map(int, input().split())

"""
高橋くんの戦略
最も遠くに行けるなら言って往復
そのためには、遠くに行くときのポイントに青木より早く到達しなければいけない
青木くん -> 最も遠くに向かって進んでいく
"""

from collections import deque
# 木構造を作る
G = [[] for i in range(N)]
for i in range(N-1):
    # グラフに頂点を追加(距離があるときは,u,vの後に入れる)
    u,v = map(int,input().split())
    G[u-1].append((v-1))
    G[v-1].append((u-1))

# 木をBFSをする
used = [-1] * N
used[V-1] = 0 # 始めどこから行くか

q = deque([V-1])
while len(q) > 0:
    a = q.popleft()
    Vs = G[a]
    for u in Vs: # 頂点以外の要素がグラフにあるときはここ
        if used[u] == -1:
            q.append(u)
            # なにか処理を書きたいときはここに書く
            used[u] = used[a] + 1


used_t = [-1] * N
used_t[U-1] = 0 # 始めどこから行くか
q = deque([U-1])
while len(q) > 0:
    a = q.popleft()
    Vs = G[a]
    for u in Vs: # 頂点以外の要素がグラフにあるときはここ
        if used_t[u] == -1:
            q.append(u)
            # なにか処理を書きたいときはここに書く
            used_t[u] = used_t[a] + 1
# print(used)
# print(used_t)


diff = []
ind = []
for i,(a,t) in enumerate(zip(used,used_t)):
    diff.append(a-t)
    ind.append((t,i))
# print(diff)
ind.sort(reverse=True)
# print(ind)

start = diff[V-1]
ans = 0
for d_taka,i in ind:
    # print("info",d_taka,i,diff[i])
    if diff[i] < 0:
        continue
    ans = d_taka - 1
    break
print(ans)