#include<iostream>
#include<vector>
#include<cstdio>
#define int long long
using namespace std;
int n,m,s;
vector<int> adj[500005];
int dep[500005];
int fa[500000][31];
void dfs(int root, int f, int d){
dep[root]=d;
fa[root][0]=f;
for(int i=0;i<adj[root].size();++i){
int k=adj[root][i];
if(k==f){
continue;
}
dfs(k,root,d+1);
}
}
int jump (int x, int d) {
for (int i = 0; i <= 20; ++i) {
if ((1<<i)&d) {
x=fa[x][i];
}
}
return x;
}
int lca(int x, int y){
if (dep[x]<dep[y]) {
swap(x, y);
}
int t=dep[x] - dep[y];
int xx=jump(x,t);
if(xx==y){
return y;
}
for(int i=20;i>=0;--i){
int t1=fa[xx][i];
int t2=fa[y][i];
if(t1!=t2){
xx=fa[xx][i];
y=fa[y][i];
}
}
return fa[y][0];
}
signed main(){
cin >> n >> m >> s;
for(int i=1;i<n;++i){
int x,y;
cin>>x>>y;
adj[x].push_back(y);
adj[y].push_back(x);
}
dfs(s,0,0);
for(int i=1;i<=20;++i){
for(int j=1;j<=n;++j){
fa[j][i]=fa[fa[j][i-1]][i-1];
}
}
while(m--){
int x,y;
cin>>x>>y;
cout<<lca(x,y)<<endl;
}
return 0;
}