#include<iostream>
#define int long long
using namespace std;
int nxt[1000001],to[1000001],head[1000001],pre[25][1000001],dep[1000001],p2[1000001];
int cnt;
void add(int u,int v){
nxt[++cnt]=head[u];
to[cnt]=v;
head[u]=cnt;
}
void dfs(int u,int fa){
dep[u]=dep[fa]+1;
pre[0][u]=fa;
for(int i=1;i<=24;i++)pre[i][u]=pre[i-1][pre[i-1][u]];
for(int i=head[u];i;i=nxt[i]){
if(to[i]!=fa){
dfs(to[i],u);
}
}
}
int lca(int u,int v){
if(dep[u]>dep[v])swap(u,v);
for(int i=24;i>=0;i--){
if(dep[v]-p2[i]>=dep[u]){
v=pre[i][v];
}
}
if(u==v){
return u;
}
for(int i=24;i>=0;i--){
if(pre[u][0]==pre[v][0])continue;
else if(pre[i][v]!=pre[i][u]){
v=pre[i][v],u=pre[i][u];
}
}
return pre[v][0];
}
signed main(){
int n,m,s;
cin>>n>>m>>s;
p2[0]=1;
for(int i=1;i<=100001;i++)p2[i]=p2[i-1]*2;
for(int i=1;i<=n-1;i++){
int u,v;cin>>u>>v;
add(u,v);
add(v,u);
}
dfs(s,0);
while(m--){
int u,v;
cin>>u>>v;
cout<<lca(u,v)<<endl;
}
}