#include<bits/stdc++.h>
using namespace std;
struct node
{
int to,nxt;
}e[114514*5];
int head[114514*5],cnt1;
void add(int x,int y)
{
e[++cnt1].to=y;
e[cnt1].nxt=head[x];
head[x]=cnt1;
}
int dep[114514*5],f[114514*5],size[114514*5],son[114514*5];
int top[114514*5],id[114514*5],cnt;
void dfs1(int u,int fa)
{
size[u]=1;
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].to;
if(v!=fa)
{
dep[v]=dep[u]+1;
f[v]=u;
dfs1(v,u);
size[u]+=size[v];
if(size[v]>size[son[u]])
son[u]=v;
}
}
}
void dfs2(int u,int t)
{
id[u]=++cnt;
top[u]=t;
if(son[u])
dfs2(son[u],t);
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].to;
if(v!=f[u]&&v!=son[u])
dfs2(v,v);
}
}
int lca(int x,int y)
{
while(top[x]!=top[y])
{
if(dep[top[x]]<dep[top[y]])
swap(x,y);
x=f[top[x]];
}
return dep[x]<dep[y]?x:y;
}
int n,m,s;
int main()
{
cin>>n>>m>>s;
for(int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
while(m--)
{
int x,y;
cin>>x>>y;
cout<<lca(x,y)<<endl;
}
}