// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
int ver[2*500000],nex[2*500000],head[2*500000],d[2*500000],p[2*500000][23],tot;
void add(int x,int y){
ver[++tot]=y;nex[tot]=head[x];head[x]=tot;
}
int read(){
int x=0;
char ch;
while(ch<'0'||ch>'9')ch=getchar();
while(ch>'0'&&ch<'9'){
x=x*10+ch-'0';
ch=getchar();
}
return x;
}
void dfs(int x,int fa){
d[x]=d[fa]+1;
p[x][0]=fa;
for(int i=1;(1<<i)<=d[x];i++)
p[x][i]=p[p[x][i-1]][i-1];
for(int i=head[x];i;i=nex[i]){
if(ver[i]!=fa)
dfs(ver[i],x);
}
}
int lca(int a,int b){
if(d[a]>d[b])swap(a,b);
for(int i=20;i>=0;i--)
if(d[a]<=d[b]-(1<<i))
b=p[b][i];
if(a==b)
return a;
for(int i=20;i>=0;i--)
if(p[a][i]==p[b][i])continue;
else a=p[a][i],b=p[b][i];
return p[a][0];
}
int main(){
int i,j,n,m,t,k,s;
scanf("%d %d %d",&n,&m,&s);
for(int i=1;i<n;i++)
{
int a,b;
scanf("%d %d",&a,&b);
add(a,b);
add(b,a);
}
dfs(s,0);
for(i=1;i<=m;i++)
{
int a,b;
scanf("%d %d",&a,&b);
cout<<lca(a,b)<<endl;
}
}