#include <bits/stdc++.h>
using namespace std;
int v[500010],nxt[500010],final[500010],cnt=0;
bool flag[500010];
int dep[500010],f[500010][31];
void add(int x,int y){
cnt++;
v[cnt]=y;
nxt[cnt]=final[x];
final[x]=cnt;
}
void dfs(int node){
flag[node]=true;
for(int i=final[node];i;i=nxt[i]){
if(flag[v[i]]) continue;
f[v[i]][0]=node;
dep[v[i]]=dep[node]+1;
dfs(v[i]);
}
}
int main(){
int n,m,s;
scanf("%d%d%d",&n,&m,&s);
for(int i=0;i<n-1;i++){
int x,y;
scanf("%d%d",&x,&y);
add(x,y),add(y,x);
}
dep[s]=1;
dfs(s);
for(int c=1;c<=log2(n);c++)
for(int i=1;i<=n;i++)
f[i][c]=f[f[i][c-1]][c-1];
while(m--){
int a,b;
scanf("%d%d",&a,&b);
if(dep[a]<dep[b]) swap(a,b);
for(int c=log2(n);c>=0;c--)
if(dep[f[a][c]]>=dep[b])
a=f[a][c];
if(a==b){
printf("%d\n",a);
continue;
}
for(int c=log2(n);c>=0;c--)
if(f[a][c]!=f[b][c])
a=f[a][c],b=f[b][c];
printf("%d\n",f[a][0]);
}
return 0;
}