#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int N, u, v;
vector<int> nxt[100000];

void dfs( int node, int parent_node, int depth, vector<int>&d ){
	d[node] = depth;
	for ( auto next_node : nxt[node] ){
		if ( next_node != parent_node ){
			dfs( next_node, node, depth+1, d );
		}
	}
}


int main(){
	cin >> N >> u >> v;
	u--;
	v--;

	for ( int i = 0; i < N-1; i++ ){
		int a, b;
		cin >> a >> b;
		a--; b--;
		nxt[a].push_back(b);
		nxt[b].push_back(a);
	}
	
	vector<int> du(N);
	vector<int> dv(N);
	dfs( u, -1, 1, du );
	dfs( v, -1, 1, dv );
	
	
	int max_du = -1;
	int max_dv = -1;
	for ( int i = 0; i < N; i++ ){
		if ( dv[i] > du[i] && max_dv < dv[i] ){
			max_du = du[i];
			max_dv = dv[i];
		}
	}
	
	// vは、開始地点(dv=1)から、最もvから遠い点の1歩手前(dv=max_dv-1)まで移動する
	cout << (max_dv-2) << endl;
	
	return 0;
}

