#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, m, s, dis[1000005], fa[1000005];
bool vis[1000005];
vector<ll>bian[1000005];
struct node{
ll x, c;
};
void bfs(){
queue<node>que;node a;
que.push({s, 1});vis[s]=1;dis[s]=1;fa[s]=1;
while(que.size()){
a=que.front(); que.pop();
for(auto v:bian[a.x]){
if(vis[v]==0){que.push({v, a.c+1});vis[v]=1;dis[v]=a.c+1;fa[v]=a.x;}
}
}
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin >> n >> m >> s;
for(ll i=1; i<n; i++){
ll x, y;cin >> x >> y;
bian[x].push_back(y);
bian[y].push_back(x);
}
bfs();
while(m--){
ll a, b, x, y;
cin >> a >> b;
x=a, y=b;
if(dis[a]>dis[b])
for(ll i=0; i<dis[a]-dis[b]; i++)x=fa[x];
else if(dis[b]>dis[a])
for(ll i=0; i<dis[b]-dis[a]; i++)y=fa[y];
while(x!=y)x=fa[x],y=fa[y];
cout<<x<<'\n';
}
return 0;
}