#include<bits/stdc++.h>
using namespace std;
int n,m,s;
const int N=2000005;
int cnt,head[N],nxt[N],to[N];
int dep[N],fa[N],top[N],siz[N],son[N];
void add(int x,int y)
{
cnt++;
nxt[cnt]=head[x];
head[x]=cnt;
to[cnt]=y;
}
void dfs1(int x,int ff)
{
siz[x]=1;
fa[x]=ff;
int maxv=0;
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
if(y==ff)continue;
dep[y]=dep[x]+1;
dfs1(y,x);
siz[x]+=siz[y];
if(siz[y]>maxv)
{
maxv=siz[y];
son[x]=y;
}
}
}
void dfs2(int x,int t)
{
top[x]=t;
if(son[x])dfs2(son[x],t);
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
if(y==fa[x]||y==son[x])continue;
dfs2(y,y);
}
}
int lca(int x,int y)
{
while(top[x]!=top[y])
{
if(dep[top[x]]<=dep[top[y]])y=fa[top[y]];
else x=fa[top[x]];
}
return dep[x]<=dep[y]?x:y;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m>>s;
for(int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
dfs1(s,s);
dfs2(s,s);
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
cout<<lca(x,y)<<endl;
}
}