#include<bits/stdc++.h>
using namespace std;
int n,m;
int idx;
struct AA
{
int t,nex;
}e[500005];
int s;
int fa[500005][26],depth[500005];
int head[500005];
void add(int x,int y)
{
e[++idx].t=y;
e[idx].nex=x;
head[x]=idx;
}
void dfs(int x,int p)
{
fa[x][0]=p;
depth[x]=depth[p]+1;
for(int i=1;i<=log(depth[x])/log(2)+1;i++)
{
fa[x][i]=fa[fa[x][i-1]][i-1];
}
for(int i=head[x];i;i=e[i].nex)
{
if(e[i].t!=p) dfs(e[i].t,x);
}
}
int LCA(int x,int y)
{
if(depth[x]<depth[y])
{
swap(x,y);
}
while(depth[x]>depth[y])
{
int kk=log(depth[x]-depth[y])/log(2);
x = fa[x][kk];
}
if(x==y)return x;
for(int k = log(depth[x])/log(2); k >= 0; --k)
{
if(fa[x][k] != fa[y][k])
x = fa[x][k], y = fa[y][k];
}
return fa[x][0];
}
int main()
{
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=n-1;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
dfs(s,0);
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",LCA(x,y));
}
return 0;
}