#include <iostream>
using namespace std;
const int N=1e7;
int cnt,n,m,s,vis[N],head[N],d[N],fa[N][22],log2[N];
struct node
{
int to,nex;
}e[N];
void add(int u,int v)
{
e[++cnt].to=v;
e[cnt].nex=head[u];
head[u]=cnt;
}
void dfs(int cur,int father)
{
fa[cur][0]=father;
d[cur]=d[father]+1;
for(int i=1;i<=log2[d[cur]];i++)
fa[cur][i]=fa[fa[cur][i-1]][i-1];
for(int i=head[cur];i;i=e[i].nex)
if(e[i].to!=father)
dfs(e[i].to,cur);
}
int LCA(int a,int b)
{
if(d[a]>d[b])
swap(a,b);
while(d[a]!=d[b])
b=fa[b][log2[d[b]-d[a]]];
if(a==b)
return a;
for(int k=log2[d[a]];k>=0;k--)
if(fa[a][k]!=fa[b][k])
a=fa[a][k],b=fa[b][k];
return fa[a][0];
}
main()
{
cin>>n>>m>>s;
for(int i=2;i<=n;i++)
log2[i]=log2[i/2]+1;
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
add(u,v);
add(v,u);
}
for(int i=1;i<=m;i++)
{
int a,b;
cin>>a>>b;
cout<<LCA(a,b)<<endl;
}
}