#include<bits/stdc++.h>
using namespace std;
struct st_table{
int f[1000010][20],s;
int que(int x,int y){
if(x==y) return f[x][0];
if(x>y) swap(x,y);
int d=log2(y-x);
return min(f[x][d],f[x+(1<<d)][d]);
}
void init(queue<int> q){
while(!q.empty()){
f[++s][0]=q.front();
q.pop();
}
for(int i=2,k=1;i<s;i*=2,k++){
for(int j=1;j+i-1<=s;j++){
f[j][k]=que(j,j+i-1);
}
}
}
}st;
queue<int> r;
vector<int> e[500010];
int n,q,a,b;
int p[500010],d[500010],c[500010],t;
void dfs1(int u,int fa){
d[u]=++t;
r.push(d[u]);
p[u]=r.size();
c[d[u]]=u;
for(int i=0;i<int(e[u].size());i++){
int v=e[u][i];
if(v==fa) continue;
dfs1(v,u);
r.push(d[u]);
}
}
int lca(int x,int y){
return c[st.que(p[x],p[y])];
}
int main(){
int rt;
scanf("%d%d%d",&n,&q,&rt);
for(int i=1;i<n;i++){
scanf("%d%d",&a,&b);
e[a].push_back(b);
e[b].push_back(a);
}
dfs1(rt,0);
st.init(r);
while(q--){
scanf("%d%d",&a,&b);
printf("%d\n",lca(a,b));
}
}