require "set"

N, U, V = gets.chomp.split(" ").map(&:to_i)
LINKS = {}
(N-1).times do |i|
  a, b = gets.chomp.split(" ").map(&:to_i)
  LINKS[a] ||= Set.new
  LINKS[b] ||= Set.new
  LINKS[a] << b
  LINKS[b] << a
end


def dfs(root_id, enemy_id)
  visited = Set.new([root_id])
  depth = {}
  depth[root_id] = 0
  parent = {}
  parent[root_id] = nil
  stack = [root_id]
  nearest_branch_depth = N + 1

  while !stack.empty?
    n_id = stack.pop
    nearest_branch_depth = depth[n_id] if LINKS[n_id].size > 2
    LINKS[n_id].each do |on_id|
      next if visited.include?(on_id)
      visited << on_id
      depth[on_id] = depth[n_id] + 1
      parent[on_id] = n_id
      stack.push(on_id) if on_id != enemy_id
    end
  end
  dist = depth[enemy_id]
  i = enemy_id
  ng_ids = Set.new
  while parent[i] != root_id
    ng_ids << i
    i = parent[i]
  end
  max_depth = depth.select {|k,v| !ng_ids.include?(k) }.map{|k,v| v}.max
  max_depth ||= 0
  if dist <= nearest_branch_depth * 2
    dist - 1
  else
    (dist - nearest_branch_depth * 2 - 1) + max_depth
  end
end

puts dfs(U, V)
