#include<bits/stdc++.h>
using namespace std;
int n,m,i,x,y,k,root;
int f[500005][22],lg[22],h[500005],dep[500005],r[1000005],t[1000005],a[500005];
inline int read(){
int x=0,m=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') m=-1;
ch=getchar();
}
while(isdigit(ch)){
x=x*10+ch-48;
ch=getchar();
}
return x*m;
}
inline void write(int x){
if(x < 0){
putchar('-');
write(-x);
return;
}
if(x>=10) write(x/10);
putchar(x%10+'0');
}
int LCA(int x,int y){
int r_1=x,r_2=y;
if (dep[r_1]>dep[r_2])
for (int i=21;i>=0;i--)
if (lg[i]<=dep[r_1]-dep[r_2]) r_1=f[r_1][i];
else if (dep[r_1]<dep[r_2])
for (int i=21;i>=0;i--)
if (lg[i]<=dep[r_2]-dep[r_1]) r_2=f[r_2][i];
if (r_1==r_2) return r_1;
for (int i=21;i>=0;i--)
if (f[r_1][i]!=f[r_2][i]){
r_1=f[r_1][i];
r_2=f[r_2][i];
}
return f[r_1][0];
}
void build(int ro,int fa){
f[ro][0]=fa;
dep[ro]=dep[fa]+1;
for (int i=1;i<=21;i++) f[ro][i]=f[f[ro][i-1]][i-1];
x=h[ro];
while (x!=0){
if (t[x]==f[x][0]){
x=r[x];
continue;
}
build(t[x],ro);
x=r[x];
}
}
signed main()
{
n=read(),m=read(),root=read();
for (int i=1;i<n;i++){
x=read(),y=read();
k++;
r[k]=h[x];
h[x]=k;
t[k]=y;
k++;
r[y]=h[y];
h[y]=k;
t[k]=x;
}
build(root,root);
lg[0]=1;
for (int i=1;i<=21;i++) lg[i]=lg[i-1]*2;
for (int i=1;i<=m;i++){
x=read(),y=read();
write(LCA(x,y));
putchar('\n');
}
}
记录