#include <bits/stdc++.h>
#define SACRIFICING using
#define THE namespace
#define QUEEN std
SACRIFICING THE QUEEN;
typedef long long ll;
const int maxxx=109;
int Log;
int n,x,y;
struct{
vector<int>q;
}tr[maxxx];
int dep[maxxx];
int fa[maxxx][10];
int xx,yy;
int nodes[1009];
int connodes[1009];
int difa[10009];
int f(int dd);
int g(int dd);
void dfs(int cur,int root,int node){
if(cur>n){
return ;
}
dep[cur]=dep[root]+1;
nodes[node]=cur;
connodes[cur]=node;
dfs(*(tr[cur].q.begin()),cur,node<<1);
dfs(*(tr[cur].q.end()),cur,node<<1+1);
}
void ST(){
for(int i=1;i<=n;i++){
fa[f(i)][0]=g(difa[i]);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=Log;j++){
fa[f(i)][j]=fa[fa[i][j-1]][j-1];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=Log;j++){
fa[f(i)][j]=f(fa[fa[i][j-1]][j-1]);
}
}
}
int query(int x,int y){
if(dep[x]<dep[y])swap(x,y);
for(int i=Log;i>=0;i--){
if(dep[fa[x][i]]>=dep[y])x=fa[x][i];
}
for(int i=Log;i>=0;i--){
if(fa[x][i]!=fa[y][i]){
x=fa[x][i];
y=fa[y][i];
}
}
return fa[x][0];
}
int main(){
scanf("%d%d%d",&n,&x,&y);
Log=ceil(1.0*log2(n));
for(int i=1;i<n;i++){
scanf("%d%d",&xx,&yy);
tr[yy].q.push_back(xx);
difa[xx]=yy;
}
dfs(1,1,1);
ST();
cout<<query(x,y);
return 0;
}
int f(int dd)
return nodes[dd];
int g(int dd)
return connodes[dd];
main.cpp: In function ‘int f(int)’: main.cpp:73:5: error: named return values are no longer supported 73 | return nodes[dd]; | ^~~~~~ compilation terminated due to -fmax-errors=1.