#include<iostream>
#include<algorithm>
#include<vector>
#define ri register int
using namespace std;
const int N=5e5+100;
int n,m,s;
struct wyx{
vector<int> childs;
int fa,d;
}nodes[N];
void dfs(ri rt,ri fa){
ri to;
for(ri i=0;i<nodes[rt].childs.size();i++){
to=nodes[rt].childs[i];
if(to==fa) continue;
nodes[to].d=nodes[rt].d+1;
nodes[to].fa=rt;
dfs(to,rt);
}
return;
}
int LCA(ri u,ri v){
if(nodes[u].d>nodes[v].d) return LCA(v,u);
while(nodes[u].d!=nodes[v].d){
v=nodes[v].fa;
}
while(u!=v){
v=nodes[v].fa;
u=nodes[u].fa;
}
return v;
}
int main(){
freopen("P3379_1.in","r",stdin);
freopen("out.out","w",stdout);
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
cin>>n>>m>>s;
ri parents,child;
for(ri i=1;i<=n-1;i++){
cin>>parents>>child;
nodes[parents].childs.push_back(child);
nodes[child].childs.push_back(parents);
}
nodes[s].fa=0;nodes[s].d=1;
dfs(s,0);
ri u,v;
for(ri i=1;i<=m;i++){
cin>>u>>v;
cout<<LCA(u,v)<<endl;
}
fclose(stdin);
fclose(stdout);
return 0;
}