#include <bits/stdc++.h>
using namespace std;
#define all(v) (v).begin(), (v).end()
const int N = 1e6 + 5;
int n, T, M;
vector<int> adj[N];
int par[N], dep[N];
int weightNode[N];
vector<pair<int,int>> subtrees;
/*
weightNode[u]:
số bước tối thiểu để thắng
nếu chuột đang ở u
và chỉ được đi xuống subtree.
*/
void dfsWeight(int u, int p)
{
par[u] = p;
vector<int> child;
for(int v : adj[u]){
if(v == p) continue;
dep[v] = dep[u] + 1;
dfsWeight(v, u);
child.push_back(weightNode[v]);
}
if(child.empty()){
weightNode[u] = 0;
return;
}
sort(all(child), greater<int>());
if((int)child.size() == 1)
weightNode[u] = child[0] + 1;
else
weightNode[u] = child[1] + 1;
}
/*
Check có thể thắng trong <= X bước không.
*/
bool check(int X)
{
vector<pair<int,int>> jobs;
int u = M;
int dist = 0;
while(u != T){
for(int v : adj[u]){
if(v == par[u]) continue;
jobs.push_back({dist, weightNode[v]});
}
u = par[u];
++dist;
}
/*
jobs:
(deadline, weight)
cần block trước khi:
blocked + weight > X
*/
sort(all(jobs));
int blocked = 0;
for(auto [d, w] : jobs){
if(d + blocked > X)
return false;
if(d + blocked + w > X){
++blocked;
}
}
return true;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> T >> M;
for(int i = 1; i < n; ++i){
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfsWeight(T, 0);
int L = 0, R = n, ans = n;
while(L <= R){
int mid = (L + R) >> 1;
if(check(mid)){
ans = mid;
R = mid - 1;
}
else{
L = mid + 1;
}
}
cout << ans << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGFsbCh2KSAodikuYmVnaW4oKSwgKHYpLmVuZCgpCgpjb25zdCBpbnQgTiA9IDFlNiArIDU7CgppbnQgbiwgVCwgTTsKdmVjdG9yPGludD4gYWRqW05dOwoKaW50IHBhcltOXSwgZGVwW05dOwppbnQgd2VpZ2h0Tm9kZVtOXTsKCnZlY3RvcjxwYWlyPGludCxpbnQ+PiBzdWJ0cmVlczsKCi8qCiAgICB3ZWlnaHROb2RlW3VdOgogICAgc+G7kSBixrDhu5tjIHThu5FpIHRoaeG7g3UgxJHhu4MgdGjhuq9uZwogICAgbuG6v3UgY2h14buZdCDEkWFuZyDhu58gdQogICAgdsOgIGNo4buJIMSRxrDhu6NjIMSRaSB4deG7kW5nIHN1YnRyZWUuCiovCgp2b2lkIGRmc1dlaWdodChpbnQgdSwgaW50IHApCnsKICAgIHBhclt1XSA9IHA7CgogICAgdmVjdG9yPGludD4gY2hpbGQ7CgogICAgZm9yKGludCB2IDogYWRqW3VdKXsKICAgICAgICBpZih2ID09IHApIGNvbnRpbnVlOwoKICAgICAgICBkZXBbdl0gPSBkZXBbdV0gKyAxOwoKICAgICAgICBkZnNXZWlnaHQodiwgdSk7CgogICAgICAgIGNoaWxkLnB1c2hfYmFjayh3ZWlnaHROb2RlW3ZdKTsKICAgIH0KCiAgICBpZihjaGlsZC5lbXB0eSgpKXsKICAgICAgICB3ZWlnaHROb2RlW3VdID0gMDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgc29ydChhbGwoY2hpbGQpLCBncmVhdGVyPGludD4oKSk7CgogICAgaWYoKGludCljaGlsZC5zaXplKCkgPT0gMSkKICAgICAgICB3ZWlnaHROb2RlW3VdID0gY2hpbGRbMF0gKyAxOwogICAgZWxzZQogICAgICAgIHdlaWdodE5vZGVbdV0gPSBjaGlsZFsxXSArIDE7Cn0KCi8qCiAgICBDaGVjayBjw7MgdGjhu4MgdGjhuq9uZyB0cm9uZyA8PSBYIGLGsOG7m2Mga2jDtG5nLgoqLwoKYm9vbCBjaGVjayhpbnQgWCkKewogICAgdmVjdG9yPHBhaXI8aW50LGludD4+IGpvYnM7CgogICAgaW50IHUgPSBNOwogICAgaW50IGRpc3QgPSAwOwoKICAgIHdoaWxlKHUgIT0gVCl7CgogICAgICAgIGZvcihpbnQgdiA6IGFkalt1XSl7CiAgICAgICAgICAgIGlmKHYgPT0gcGFyW3VdKSBjb250aW51ZTsKCiAgICAgICAgICAgIGpvYnMucHVzaF9iYWNrKHtkaXN0LCB3ZWlnaHROb2RlW3ZdfSk7CiAgICAgICAgfQoKICAgICAgICB1ID0gcGFyW3VdOwogICAgICAgICsrZGlzdDsKICAgIH0KCiAgICAvKgogICAgICAgIGpvYnM6CiAgICAgICAgKGRlYWRsaW5lLCB3ZWlnaHQpCgogICAgICAgIGPhuqduIGJsb2NrIHRyxrDhu5tjIGtoaToKICAgICAgICAgICAgYmxvY2tlZCArIHdlaWdodCA+IFgKICAgICovCgogICAgc29ydChhbGwoam9icykpOwoKICAgIGludCBibG9ja2VkID0gMDsKCiAgICBmb3IoYXV0byBbZCwgd10gOiBqb2JzKXsKCiAgICAgICAgaWYoZCArIGJsb2NrZWQgPiBYKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmKGQgKyBibG9ja2VkICsgdyA+IFgpewogICAgICAgICAgICArK2Jsb2NrZWQ7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiB0cnVlOwp9CgppbnQgbWFpbigpCnsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgY2luID4+IG4gPj4gVCA+PiBNOwoKICAgIGZvcihpbnQgaSA9IDE7IGkgPCBuOyArK2kpewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CgogICAgICAgIGFkalt1XS5wdXNoX2JhY2sodik7CiAgICAgICAgYWRqW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KCiAgICBkZnNXZWlnaHQoVCwgMCk7CgogICAgaW50IEwgPSAwLCBSID0gbiwgYW5zID0gbjsKCiAgICB3aGlsZShMIDw9IFIpewogICAgICAgIGludCBtaWQgPSAoTCArIFIpID4+IDE7CgogICAgICAgIGlmKGNoZWNrKG1pZCkpewogICAgICAgICAgICBhbnMgPSBtaWQ7CiAgICAgICAgICAgIFIgPSBtaWQgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBMID0gbWlkICsgMTsKICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCBhbnMgPDwgJ1xuJzsKCiAgICByZXR1cm4gMDsKfQo=