#include <bits/stdc++.h>
using namespace std;
const int M=500005;
int n,m,s,t;
int f[M],d[M][25];
int tot,ver[M*2],head[M],ne[M*2];
void add(int x,int y)
{
tot++;
ver[tot]=y;
ne[tot]=head[x];
head[x]=tot;
}
void dfs(int u,int fa)
{
for(int i=head[u];i!=-1;i=ne[i])
{
int v=ver[i];
if(v==fa)
continue;
f[v]=f[u]+1;
d[u][0]=u;
for(int i=0;i<=t;i++)
{
d[v][i]=d[d[v][i-1]][i-1];
}
dfs(v,u);
}
}
int lca(int x,int y)
{
if(x==y)
return x;
if(f[x]<f[y])
swap(x,y);
for(int i=t;i>=0;i--)
{
if(f[d[x][i]]>=f[y])
x=d[x][i];
}
if(x==y)
return x;
for(int i=t;i>=0;i--)
{
if(d[x][i]!=d[y][i])
{
x=d[x][i];
y=d[y][i];
}
}
return d[x][0];
}
int main()
{
cin>>n>>m>>s;
memset(head,-1,sizeof(head));
t=log(n)/log(2)+1;
for(int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
f[s]=1;
dfs(s,-1);
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
cout<<lca(x,y)<<endl;
}
return 0;
}