#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;

const int M=1e5+5;
vector<int> g[M];
int f[M];
int dsub[M]; // dsub[i] the max dep of subtree i
int dep[M];

int n,a,b;

int dfs(int u,int fa,int d)
{
	dsub[u]=1;
	f[u]=fa;
	dep[u]=d;
	for(int v:g[u])
	{
		if(v==fa) continue;
		dsub[u]=max(dsub[u],dfs(v,u,d+1)+1);
	}
	return dsub[u];
}

int main()
{
	scanf("%d%d%d",&n,&a,&b);
	int u,v;
	for(int i=1;i<n;i++)
	{
		scanf("%d%d",&u,&v);
		g[u].push_back(v);
		g[v].push_back(u);
	}
	dfs(b,-1,1);
	// d[a]-d[b] 1 2 0
	// d[a]-d[b] 3 4 1
	int step=(dep[a]-dep[b]-1)/2;
	int high=a;
	for(int i=0;i<step;i++)
		high=f[high];
	printf("%d\n",step+dsub[high]-((dep[a]-dep[b])&1));
	return 0;
}