#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=500005;
struct Edge{
int to, next;
}edge[2*N];
int head[2*N], cnt;
void addedge(int u,int v){
edge[cnt].to = v;
edge[cnt].next = head[u];
head[u] = cnt++;
}
int fa[N][20], deep[N];
void dfs(int x,int father){
deep[x] = deep[father]+1;
fa[x][0] = father;
for(int i=1;(1<<i)<=deep[x];i++)
fa[x][i] = fa[fa[x][i-1]][i-1];
for(int i=head[x];i;i=edge[i].next)
if(edge[i].to != father)
dfs(edge[i].to, x);
}
int LCA(int x,int y){
if(deep[x]<deep[y]) swap(x,y);
for(int i=19;i>=0;i--)
if(deep[x]-(1<<i)>=deep[y])
x = fa[x][i];
if(x==y) return x;
for(int i=19;i>=0;i--)
if(fa[x][i]!=fa[y][i]){
x = fa[x][i];
y = fa[y][i];
}
return fa[x][0];
}
signed main(){
int n,m,root;
scanf("%lld%lld%lld",&n,&m,&root);
for(int i=1;i<n;i++){
int u,v;
scanf("%lld%lld",&u,&v);
addedge(u,v);
addedge(v,u);
}
dfs(root,0);
while(m--){
int a,b;
scanf("%lld%lld",&a,&b);
if(LCA(a,b)==0)printf("1\n");
else printf("%lld\n",LCA(a,b));
}
return 0;
}