#include <iostream>
#include <vector>
using namespace std;
const int N=500010;
vector <int> e[N];
int fa[N][20],dep[N];
void dfs(int u,int father){
dep[u]=dep[father]+1;
fa[u][0]=father;
for (int i=1;i<=19;i++){
fa[u][i]=fa[fa[u][i-1]][i-1];
}
for (vector<int>::iterator i=e[u].begin();i<e[u].end();i++){
int v = *i;
if (v!=father){
dfs(v,u);
}
}
}
int lca(int u,int v){
if (dep[u]<dep[v])
swap(u,v);
for (int i=19;i>=0;i--){
if (dep[fa[u][i]]>=dep[v]){
u=fa[u][i];
}
}
if (u==v)
return u;
for (int i=19;i>=0;i--){
if (fa[u][i]!=fa[v][i]){
u=fa[u][i];
v=fa[v][i];
}
}
return fa[u][0];
}
int main(){
int n,m,s;
cin>>n>>m>>s;
for (int i=1;i<n;i++){
int x,y;
cin>>x>>y;
e[x].push_back(y);
}
dfs(s,0);
for (int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
cout<<lca(x,y)<<endl;
}
return 0;
}