#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
int t;
int nxt;
};
node e[1000005];
int head[1000005];
int top;
int loog[1001];
void add(int x,int y){
e[++top].t=y,e[top].nxt=head[x],head[x]=top;
}
int dep[1000005];
int f[1000005][21];
void dfs(int now,int fa){
f[now][0]=fa,dep[now]=dep[fa]+1;
for(int i=1;i<=20;i++)f[now][i]=f[f[now][i-1]][i-1];
for(int i=head[now];i;i=e[i].nxt)if(e[i].t!=fa)dfs(e[i].t,now);
}
int lca(int x,int y){
if(dep[x]<dep[y])swap(x,y);
while(dep[x]>dep[y])x=f[x][loog[dep[x]-dep[y]]-1];
if(x==y)return x;
for(int k=loog[dep[x]]-1;k>=0;k--)if(f[x][k]!=f[y][k])x=f[x][k],y=f[y][k];
return f[x][0];
}
void init (int n){for(int i=1;i<=n;i++)loog[i]=loog[i-1]+(1<<loog[i-1]==i);return;}
int main(){
int n,m,s;
init(n);
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=n-1;i++){
int x,y;
scanf("%d%d",&x,&y);
add(x,y),add(y,x);
}
dfs(s,0);
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",lca(x,y));
}
return 0;
}
30分,全mle