#include<bits/stdc++.h>
using namespace std;
int n,m;
int cnt,last[500005],xe[500005],v[500005];
int deep[500005],f[500005],ff[500005];
int siz[500005];
int maxx[500005];
void add(int x,int y)
{
cnt++;
v[cnt]=y;
xe[cnt]=last[x];
last[x]=cnt;
}
inline void qq(register const int &x)
{
deep[x]=deep[ff[x]]+1;
siz[x]=1;
for(register int i=last[x];i;i=xe[i])
{
if(v[i]==ff[x])continue;
ff[v[i]]=x;
qq(v[i]);
siz[x]+=siz[v[i]];
if(siz[v[i]]>siz[maxx[x]])maxx[x]=v[i];
}
}
inline void qq2(register const int &x,register const int &top)
{
f[x]=top;
if(maxx[x]!=0)qq2(maxx[x],top);
for(register int i=last[x];i;i=xe[i])
if(v[i]!=maxx[x]&&v[i]!=ff[x])
qq2(v[i],v[i]);
}
inline int LCA(register int &x,register int &y)
{
while(f[x]!=f[y])
if(deep[f[x]]>deep[f[y]])
x=ff[f[x]];
else
y=ff[f[y]];
return deep[x]>deep[y]?y:x;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int S;
cin>>n>>m>>S;
for(int i=1;i<=n-1;i++)
{
int u,v;
cin>>u>>v;
add(u,v);
add(v,u);
}
qq(S);
qq2(S,S);
for(int i=1;i<=n;i++)
{
int x,y;
cin>>x>>y;
cout<<LCA(x,y)<<'\n';
}
}