#include<bits/stdc++.h>
using namespace std;
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
void write(int x)
{
if(x<0)
putchar('-'),x=-x;
if(x>9)
write(x/10);
putchar(x%10+'0');
return;
}
int bz[500010][140];
int n,m,s,x,y,c,d;
vector<int> e[500010];
vector<int> b[500010];
int dep[500010];
void dfs(int x,int y){
dep[x]=dep[y]+1;
bz[x][0]=y;
for (int i=1;i<=20;i++){
for (int j=1;j<=n;j++){
bz[j][i]=bz[bz[j][i-1]][i-1];
}
}
for (auto i:b[x]){
if (i!=y){
dfs(i,x);
}
}
}
int lca(int x,int y){
if (dep[x]<dep[y]){
swap(x,y);
}
for (int i=20;i>=0;i--){
if (dep[bz[x][i]]>=dep[y]){
x=bz[x][i];
}
}
if (x==y){
return x;
}
for (int i=20;i>=0;i--){
if (bz[x][i]!=bz[y][i]){
x=bz[x][i];
y=bz[y][i];
}
}
return bz[x][0];
}
int main(){
n=read();
m=read();
s=read();
for (int i=1;i<=n-1;i++){
x=read();
y=read();
b[x].push_back(y);
b[y].push_back(x);
}
dfs(s,0);
while (m--){
c=read();
d=read();
write(lca(c,d));
cout << '\n';
}
return 0;
}