#include <bits/stdc++.h>
using namespace std;
const int N = 500005,M=30;
int n,m,k;
struct node{
int f;
vector <int> v;
}e[N];
int shen[N];
int dp[N][M];
void DFS(int qi){
for(int i=0;i<e[qi].v.size();i++){
if(e[qi].v[i]==e[qi].f)continue;
shen[e[qi].v[i]]=shen[qi]+1;
e[e[qi].v[i]].f=qi;
DFS(e[qi].v[i]);
}
}
void chushihua(){
for(int j=1;j<=20;j++){
for(int i=1;i<=n;i++){
dp[i][j]=dp[dp[i][j-1]][j-1];
}
}
}
int hhh(int x,int y){
int dx=shen[x],dy=shen[y];
if(dx<dy){
swap(x,y);
swap(dx,dy);
}
int xr=x,yr=y;
for(int i=20;i>=0;i--){
int ans=dx-dy;
if(ans>=(1<<i)){
xr=dp[xr][i];
dx=dx-(1<<i);
}
}
if(yr==xr){
return xr;
}
for(int i=20;i>=0;i--){
if(dp[xr][i]!=dp[yr][i]){
xr=dp[xr][i];
yr=dp[xr][i];
}
}
return e[xr].f;
}
int main(){
cin>>n>>m>>k;
for(int i=1;i<=(n-1);i++){
int x,y;
cin>>x>>y;
e[x].v.push_back(y);
e[y].v.push_back(x);
}
e[k].f=k;
shen[k]=1;
DFS(k);
for(int i=1;i<=n;i++){
dp[i][0]=e[i].f;
}
chushihua();
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
cout<<hhh(x,y)<<endl;
}
return 0;
}