#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<vector>
#include<stack>
#include<map>
#include<set>
#include<ctime>
#include<cstdlib>
#define LL long long
using namespace std;
const int constant=500005;
int n,m,root,f[constant][100],deep[constant],vis[constant];
vector <int> v[constant];
void dfs(int x){
for(int i=0;i<v[x].size();i++){
int s=v[x][i];
if(vis[s]==0){
vis[s]=1;
deep[s]=1+deep[x];
dfs(s);
}
}
return ;
}
void _(){
for(int i=1;i<=21;i++){
for(int j=1;j<=n;j++){
f[j][i]=f[f[j][i-1]][i-1];
}
}
return ;
}
int LCA(int x,int y){
if(deep[x]<deep[y]) swap(x,y);
for(int i=20;i>=0;i--){
if(deep[f[x][i]]>=deep[y]) x=deep[f[x][i]];
}
if(x==y) return x;
for(int i=20;i>=0;i--){
if(f[x][i]!=f[y][i]){
x=f[x][i];
y=f[y][i];
}
}
return f[x][0];
}
int main(){
scanf("%d%d%d",&n,&m,&root);
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
v[x].push_back(y);
}
dfs(root);
_();
for(int i=1;i<=n;i++){
cerr<<deep[i]<<" ";
}
cerr<<"\n";
while(m--){
int a,b;
scanf("%d%d",&a,&b);
printf("%dsss\n",LCA(a,b));
}
return 0;
}