#include<bits/stdc++.h>
using namespace std;
int n,m,tot=0,rt,f[500010],g[500010][20],siz[500010],ft[500010],fa[500010];
vector<int> vec[500010];
bool vis[500010];
void dfs(int u,int dep)
{
f[++tot]=u;
ft[u]=tot;
vis[u]=true;
siz[u]=dep;
for(auto x:vec[u])
{
if(!vis[x])
{
dfs(x,dep+1);
f[++tot]=u;
siz[tot]=dep;
}
}
}
void init(int l)
{
for(int i=1;i<=l;i++) g[i][0]=i;
for(int j=1;(1<<j)<=l;j++)
{
for(int i=1;i+(1<<j)-1<=l;i++)
{
int a=g[i][j-1],b=g[i+(1<<(j-1))][j-1];
if(siz[a]<siz[b]) g[i][j]=a;
else g[i][j]=b;
}
}
}
int rmq(int l,int r)
{
int k=0;
while(1<<(k+1)<r-l+1) k++;
int a=g[l][k],b=g[r-(1<<k)+1][k];
if(siz[a]<siz[b]) return a;
else return b;
}
int lca(int l,int r)
{
return f[rmq(min(ft[l],ft[r]),max(ft[l],ft[r]))];
}
int main()
{
cin>>n>>m>>rt;
int u,v;
for(int i=1;i<n;i++)
{
cin>>u>>v;
vec[u].push_back(v);
vec[v].push_back(u);
}
dfs(rt,1);
init(tot);
for(int i=1;i<=m;i++)
{
cin>>u>>v;
cout<<lca(u,v)<<endl;
}
return 0;
}