#include<bits/stdc++.h>
using namespace std;
int fa[500600][31],ct[500600][31],dep[500600];
bool vis[500600];
vector<int> t[500600];
int l2[1000600];
void rc(int a){
l2[1]=0;
for(int i=2;i<=a;i++){
l2[i]=l2[i/2]+1;
}
}
void dfs(int rt,int bf){
vis[rt]=1;
fa[rt][0]=bf;
dep[rt]=dep[fa[rt][0]]+1;
for(int i=1;i<31;i++){
fa[rt][i]=fa[fa[rt][i-1]][i-1];
// ct[rt][i]=ct[fa[rt][-1]][i-1]+ct[rt][i-1];
}
int siz=t[rt].size();
for(int i=0;i<siz;i++){
if(vis[t[rt][i]]==0){
dfs(t[rt][i],rt);
}
}
}
int main(){
int n,m,s;
cin>>n>>m>>s;
rc(s);
int u,v;
for(int i=1;i<n;i++){
scanf("%d%d",&u,&v);
t[u].push_back(v);
t[v].push_back(u);
}
dep[s]=1;
dfs(s,0);
int l,r,l1,r1;
int c1;
for(int i=1;i<=m;i++){
scanf("%d%d",&l,&r);
c1=abs(dep[l]-dep[r]);
if(dep[l]>dep[r]){//l>r;
swap(l,r);
}
while(c1!=0){
r=fa[r][l2[c1]];
c1=c1-( 1 << (l2[c1]));
}
while(l!=r){
l=fa[l][0];
r=fa[r][0];
}
cout<<r<<endl;
}
return 0;
}
都是2秒多,还能怎么优化