#include <bits/stdc++.h>
using namespace std;
struct node{
int p,id;
};
int n,m,root;
int fa[500010],vis[500010],ans[500010];
vector<int> e[500010];
vector<node> q[500010];
int find(int x){
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
void tarjan(int x){
vis[x]=1;
for(int i=0;i<e[x].size();i++){
int nx=e[x][i];
if(vis[nx]) continue;
tarjan(nx);
fa[nx]=x;
}
for(int i=0;i<q[x].size();i++){
int px=q[x][i].p,ix=q[x][i].id;
if(vis[px]==0) ans[ix]=find(px);
}
vis[x]=0;
}
int main(){
cin>>n>>m>>root;
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=n-1;i++){
int x,y;
cin>>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
q[x].push_back((node){y,i});
q[y].push_back((node){x,i});
}
tarjan(root);
for(int i=1;i<=m;i++) cout<<ans[i]<<endl;
return 0;
}
总有一个点过不了 wa