using System;
using System.Collections.Generic;

namespace F
{
    class Program
    {
        static int sum;
        static int maxcnt=0;
        static bool flg = false;
        static int dfs(int t,int[] d, List<List<int>> ab,int cnt,int idx)
        {
            if (idx>=ab[t].Count)
            {
                flg = true;
                return cnt;
            }
            for(int i=idx;i<ab[t].Count;i++)
            {
                if(d[ab[t][i]] == 0)
                {
                    d[ab[t][i]] = 1;
                    int id = ab[t][i];
                    idx = 0;
                    sum = dfs(id, d, ab, cnt+1,idx);
                }
                if(flg == true)
                {
                    if (sum > maxcnt)
                    {
                        maxcnt = sum;
                        flg = false;
                        cnt = 0;
                    }
                }
            }
            return maxcnt;
        }
        static void Main(string[] args)
        {
            string[] Nvu = Console.ReadLine().Split(' ');
            int N = int.Parse(Nvu[0]);int v = int.Parse(Nvu[1])-1;int u = int.Parse(Nvu[2])-1;
            List<List<int>> ab = new List<List<int>>();
            int[] d1 = new int[N];
            int[] d2 = new int[N];

            for (int i=0;i<N;i++)
            {
                ab.Add(new List<int>());
            }
            for(int i=0;i<N-1;i++)
            {
                string[] AB = Console.ReadLine().Split(' ');
                int a = int.Parse(AB[0]);int b = int.Parse(AB[1]);
                ab[--a].Add(--b);
                //ab[b].Add(a);
            }
            d1[v] = 1;
            d2[u] = 1;
            int cnt1,cnt2;
            cnt1 = dfs(v, d1, ab, 0, 0);
            cnt2 = dfs(u, d2, ab, 0, 0);
            if (cnt1 - cnt2 == 1)
            {
                Console.WriteLine(0);
            }
            else
            {
                Console.WriteLine(cnt2-1);
            }
        }
    }
}
