#include<bits/stdc++.h>
using namespace std;
int n,m,s;
int h[1000010],dep[500010],e[1000010],ne[1000010],f[500010][21],idx=0;
void add(int a,int b)
{
e[idx]=b;
ne[idx]=h[a];
h[a]=idx++;
}
void dfs(int u,int d)
{
dep[u]=d;
for(int ii=h[u];ii!=-1;ii=ne[ii])
{
int j=e[ii];
if(!dep[j] and j!=s)
{
//cout<<" "<<u<<" "<<j<<endl;
dfs(j,d+1),f[j][0]=u;
}
}
}
int lca(int u,int v)
{
if(dep[u]<dep[v])swap(u,v);
//u 大 v 小
// cout<<dep[u]<<" "<<dep[v]<<endl;
int temp=dep[u]-dep[v];
int it=20;
while(dep[v]!=dep[u])
{
if(dep[f[u][it]]>=dep[v]) //u 大 v 小
{
//cout<<endl;
u=f[u][it];
}
it--;
}
if(u==v)return u;
for(int i=log2(dep[u]);i>=0;i--)
{
if(f[u][i]!=f[v][i])
{
u=f[u][i];
v=f[v][i];
}
}
return f[u][0];
}
int main()
{
memset(h,-1,sizeof(h));
cin>>n>>m>>s;
for(int i=1;i<n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
f[s][0]=s;
dfs(s,1);
for(int i=1;i<=n;i++)
{
for(int j=1;(j<<1)<=n;j++)// i<<1 是因为0的就是父节点 所以循环从1开始循 意思为2步 2=2^1
{
f[i][j]=f[f[i][j-1]][j-1];
}
}
for(int i=1;i<=m;i++)
{
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",lca(l,r));
}
}
/*
5 1 4
3 1
2 4
5 1
1 4
2 4
*/