#include<bits/stdc++.h>
using namespace std;
int n,m,s,f[500005],o,oo,st[500005][22],d[30],tot;
struct p{
int n,p;
}a[1000005];
void dfs(int u,int v){st[u][0]=v;
for(int i=f[u];i;i=a[i].n){if(a[i].p==v)continue;
d[a[i].p]=d[u]+1;dfs(a[i].p,u);
}
}
void gst(){for(int i=1;i<=21;i++)for(int j=1;j<=n;j++)st[j][i]=st[st[j][i-1]][i-1];}
void add(int x,int y){
a[++tot].n=f[x];
a[tot].p=y;
f[x]=tot;
}
int lca(int u,int v){
if(d[u]<d[v])swap(u,v);
for(int i=0,de=d[u]-d[v];de;i++,de/=2)if(de%2==1)u=st[u][i];
if(u==v)return u;
for(int i=21;i>=0;i--)if(st[u][i]!=st[v][i])u=st[u][i],v=st[v][i];
return st[u][0];
}
int main(){
cin>>n>>m>>s;
for(int i=1;i<n;i++){
cin>>o>>oo;add(o,oo),add(oo,o);
}dfs(s,0);gst();
for(int i=1;i<=m;i++){
cin>>o>>oo;cout<<lca(o,oo)<<endl;
}
return 0;
}
感觉没错。。。