#include<iostream>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
int head[500005],k=0,d[500005],p[500005][30];
struct h{
int to,next;
};
h a[1000005];
inline void add(int x,int y){
a[k].to=y;
a[k].next=head[x];
head[x]==k++;
}
inline void h(int x,int fa){
d[x]=d[fa]+1;
p[x][0]=fa;
for(int i=1;(1<<i)<=d[x];i++){
p[x][i]=p[p[x][i-1]][i-1];
}
for(int i=head[x];i!=-1;i=a[i].next){
int y=a[i].to;
if(y!=fa)h(y,x);
}
}
inline int lca(int x,int y){
if(d[x]>d[y])swap(x,y);
for(int i=20;i>=0;i--){
if(d[x]<=d[y]-(1<<i))y=p[y][i];
}
if(x==y)return x;
for(int i=20;i>=0;i--){
if(p[x][i]==p[y][i])continue;
x=p[x][i];y=p[y][i];
}
return p[x][0];
}
int main(){
int n,m,s;
cin>>n>>m>>s;
memset(head,-1,sizeof(head));
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
add(x,y);add(y,x);
}
h(s,0);
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
cout<<lca(x,y)<<endl;
}
}
why输出全0