#include<bits/stdc++.h>
using namespace std;
struct edge{
int to,nt;
}e[1000005];
int n,m,s,ecnt,bh,hd[500005],de[500005],sz[500005],sq[500005],dn[500005],tp[500005],fa[500005],vr[500005],bg[500005];
void add(int x,int y)
{
e[++ecnt].to=y;
e[ecnt].nt=hd[x];
hd[x]=ecnt;
}
void dfs1(int nw,int en){
sz[nw]=1;
fa[nw]=en;
de[nw]=de[en]+1;
for(int i=hd[nw];i;i=e[i].nt){
if(vr[i]==en)continue;
dfs1(vr[i],nw);
sz[nw]+=sz[vr[i]];
if(bg[nw]==0||sz[bg[nw]]<sz[vr[i]])bg[nw]=vr[i];
}
}
void dfs2(int nw,int t){
tp[nw]=t;
dn[nw]=++bh;
sq[bh]=nw;
if(bg[nw])dfs2(bg[nw],t);
for(int i=hd[nw];i;i=e[i].nt){
if(vr[i]==fa[nw]||vr[i]==bg[nw])continue;
dfs2(vr[i],vr[i]);
}
}
int lca(int a,int b){
while(tp[a]!=tp[b]){
if(de[tp[a]]<de[tp[b]])
swap(a,b);
a=fa[tp[a]];
}
if(de[a]>de[b])swap(a,b);
return a;
}
int main(){
cin>>n>>m>>s;
for(int i=1;i<=n-1;i++){
int a,b;
cin>>a>>b;
add(a,b);
add(b,a);
}
dfs1(s,s);
dfs2(s,s);
while(m--){
int a,b;
cin>>a>>b;
cout<<lca(a,b)<<endl;
}
return 0;
}