#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
int n,m,s,x,y,a,b;
vector<int>e[N];
int f[N][30],dep[N],lg[N];
void dfs(int now,int fath){
dep[now]=dep[fath]+1;
f[now][0]=fath;
for(int i=1;i<=lg[dep[now]];i++) f[now][i]=f[f[now][i-1]][i-1];
for(int i=0;i<e[now].size();i++){
if(e[now][i]!=fath){
dfs(e[now][i],now);
}
}
}
int LCA(int a,int b){
if(dep[a]<dep[b]) swap(a,b);
while(dep[a]>dep[b]){
a=f[a][lg[dep[a]-dep[b]]];
}
if(a==b) return a;
for(int k=lg[dep[a]];k>=0;k--){
if(f[a][k]!=f[b][k]){
a=f[a][k],b=f[b][k];
}
}
return f[a][0];
}
int main(){
cin>>n>>m>>s;
for(int i=1;i<n;i++){
cin>>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
for(int i=1;i<=n;i++){
lg[i]=lg[i-1]+(1<<(lg[i-1]+1)==i);
}
dfs(1,0);
while(m--){
cin>>a>>b;
cout<<LCA(a,b)<<endl;
}
return 0;
}