#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N=5e5+10,M=N*2;
int d[N],fa[N][17],n,m,root;
int e[M],ne[M],h[N],idx,q[N];
void add(int x,int y)
{
e[idx]=y,ne[idx]=h[x],h[x]=idx++;
}
void bfs(int x)
{
memset(d,0x3f,sizeof d);
d[0]=0,d[x]=1;
int hh=1,tt=1;
q[1]=x;
while(hh<=tt)
{
int t=q[hh++];
for(int i=h[t];~i;i=ne[i])
{
int j=e[i];
if(d[j]>d[t]+1)
{
d[j]=d[t]+1;
q[++tt]=j;
fa[j][0]=t;
for(int k=1;k<=16;k++)
{
fa[j][k]=fa[fa[j][k-1]][k-1];
}
}
}
}
}
int lca(int x,int y)
{
if(d[x]<d[y])swap(x,y);
for(int i=16;i>=0;i--)
{
if(d[fa[x][i]]>=d[y])x=fa[x][i];
}
if(x==y)return x;
for(int i=16;i>=0;i--)
{
if(fa[x][i]!=fa[y][i])
{
x=fa[x][i];
y=fa[y][i];
}
}
return fa[x][0];
}
int main()
{
scanf("%d%d%d",&n,&m,&root);
memset(h,-1,sizeof h);
while(--n)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y),add(y,x);
}
bfs(root);
while(m--)
{
int x,y;
scanf("%d%d",&x,&y);
if(x==y)printf("%d\n",x);
else
{
int p=lca(x,y);
printf("%d\n",p);
}
}
}