Rt.
#include<bits/stdc++.h>
using namespace std;
int n,m,s;
vector <int> e[1001000];
int lg[51];
int deep[1001000];
int fa[1000100][51];
void dfs(int u,int fat,int de){
fa[u][0]=fat,deep[u]=de;
for(int i=1;i<=lg[deep[u]]+1;i++)
fa[u][i]=fa[fa[u][i-1]][i-1];
for(int i=0;i<e[u].size();i++)
if(deep[e[u][i]]==0) dfs(e[u][i],u,de+1);
}
void init(){
for(int i=1;i<=n;i++) lg[i]=lg[i-1]+((1<<lg[i-1])==i);
for(int i=0;i<=n;i++) lg[i]--;
dfs(s,0,1);
}
int lca(int x,int y){
if(deep[x]<deep[y]) swap(x,y);
while(deep[x]>deep[y]) x=fa[x][lg[deep[x]-deep[y]]];
if(x==y) return x;
for(int i=lg[deep[x]];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,&m,&s);
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
e[x].push_back(y),e[y].push_back(x);
}
init();
while(m--){
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",lca(x,y));
}
return 0;
}