#include<bits/stdc++.h>
using namespace std;
long long n,m,s,depth[10000000],fa[999999][99],lg[999999],head[99999];
struct node{
long long t;
long long next;
}a[9000000];
long long x,y,p;
void add(int x,int y)
{
p++;
a[p].t=y;
a[p].next=head[x];
head[x]=p;
}
void dfs(int x,int f)
{
fa[x][0]=f;
depth[x]=depth[f]+1;
for(int i=1;i<=lg[depth[x]];i++)
{
fa[x][i]=fa[fa[x][i-1]][i-1];
}
for(int i=head[x];i;i=a[i].next)
{
if(a[i].t!=f)
{
dfs(a[i].t,x);
}
}
}
int LCA(int x,int y)
{
if(depth[x]<depth[y])
{
swap(x,y);
}
while(depth[x]>depth[y])
{
x=fa[x][lg[depth[x]-depth[y]]-1];
}
if(x==y)return x;
for(int k=lg[depth[x]];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("%lld %lld %lld",&n,&m,&s);
for(int i=1;i<=n-1;i++)
{
scanf("%lld %lld",&x,&y);
add(y,x);
add(x,y);
}
for(int i=1;i<=n;i++)
{
lg[i]=lg[i-1]+(1<<lg[i-1]==i);
}
dfs(s,0);
for(int i=1;i<=m;i++)
{
scanf("%lld %lld",&x,&y);
if(x==y)
{
printf("%d\n",x);
continue;
}
printf("%d\n",LCA(x,y));
}
return 0;
}