#include<bits/stdc++.h>
using namespace std;
int n,m,r,cen[500005];
vector<int> a[500005];
int f[500005][30];
bool flag[500005];
void unit(int l,int zx){
cen[l]=cen[zx]+1;
f[l][0]=l;
f[l][1]=zx;
for(int i=2;i<=log2(cen[l]);i++){
f[l][i]=f[f[l][i-1]][i-1];
}
flag[l]=1;
for(int i=0;i<a[l].size();i++){
if(flag[a[l][i]]==0){
unit(a[l][i],l);
}
}
}
void lca(int x1,int x2){
if(cen[x1]>cen[x2]){
swap(x1,x2);
}
int d=1;
while(cen[x2]>cen[x1]){
while(cen[x2]-d+1>=1&&cen[x2]-d+1>=cen[x1]){
d*=2;
}
d/=2;
x2=f[x2][int(log2(d))];
}
if(x1==x2){
printf("%d\n",x1);
return;
}
d=1;
while(d<cen[x1]){
d*=2;
}
int ans=x1,acen=cen[x1];
while(d>0){
int fff=0;
while(d>acen||flag==0||d!=0){
d/=2;
if(d>acen||d==0){
continue;
}
int tmp1=f[x1][int(log2(d))],tmp2=f[x2][int(log2(d))];
if(tmp1!=tmp2){
fff=1;
ans=f[ans][int(log2(d))];
acen=acen-d+1;
}
}
}
ans=f[ans][1];
printf("%d\n",ans);
}
int main(){
scanf("%d%d%d",&n,&m,&r);
int x,y;
for(int i=1;i<n;i++){
scanf("%d%d",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
}
unit(r,r);
int x1,x2;
for(int i=1;i<=m;i++){
scanf("%d%d",&x1,&x2);
lca(x1,x2);
}
return 0;
}