#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
const int SIGN=19;
int n,m,a,b,s,f,t,deep[N],anc[SIGN][N];
vector<int>v[N];
void dfs(int u,int fa){
deep[u]=deep[fa]+1;
anc[0][u]=fa;
for(int i=1;i<=SIGN;i++)anc[i][u]=anc[i-1][anc[i-1][u]];
for(int i=0;i<v[u].size();i++){
if(v[u][i]==fa)continue;
dfs(v[u][i],u);
}
}
int getlca(int x,int y){
if(deep[x]<deep[y])swap(x,y);
for(int i=SIGN;i>=0;i--)
if(deep[anc[i][x]]>=deep[y])x=anc[i][x];
if(x==y)return x;
for(int i=SIGN;i>=0;i--){
if(anc[i][x]!=anc[i][y])x=anc[i][x],y=anc[i][y];
}
return anc[0][x];
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>m>>s;
for(int i=1;i<n;i++){
cin>>f>>t;
v[f].push_back(t),v[t].push_back(f);
}
dfs(s,0);
for(int i=1;i<=m;i++){
cin>>a>>b;
cout<<getlca(a,b)<<endl;
}
return 0;
}