#include<bits/stdc++.h>
using namespace std;
int s;
map<int,map<int,int> >mp;
vector<int> t[500005];
int c[500005];
int d[500005];
int f[500005];
int fa[500005];
bool yi[500005];
bool l[500005];
int ll[500005];
inline int read()
{
int w=0,f=1;
char ch=getchar();
while(ch<'0' || ch>'9')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
{
w=(w<<3)+(w<<1)+(ch^48);
ch=getchar();
}
return w*f;
}
inline void add(int x,int y){
c[x]++;c[y]++;t[x].push_back(y);t[y].push_back(x);
}
void dfs(int a,int b){
fa[a]=b;
d[a]=d[b]+1;
if(b!=s){
if(c[b]>2)
f[a]=b;
else
f[a]=f[b];
}
else
f[a]=s;
for(int i=1;i<=c[a];i++){
if(t[a][i]!=b)
dfs(t[a][i],a);
}
}
void dfs2(int a,int b){
if(yi[a]==true)
return;
yi[a]=true;
if(c[a]==2&&a!=s){
l[a]=1;
ll[a]=ll[b];
}
else
ll[a]=a;
dfs2(fa[a],a);
}
int lca(int a,int b){
while(a!=b){
if(d[a]>=d[b]){
if(ll[a]==f[b]||ll[a]==ll[b])
return b;
}
else{
if(ll[b]==f[a]||ll[a]==ll[b])
return a;
}
if(d[a]<=d[b])
b=f[b];
else
a=f[a];
}
return a;
}
signed int main()
{
int n,m,x,y,a,b;
cin>>n>>m>>s;
for(int i=1;i<=n;i++)
t[i].push_back(0);
for(int i=1;i<n;i++){
x=read();
y=read();
add(x,y);
}
dfs(s,0);
f[s]=s;
for(int i=1;i<=n;++i){
if(c[i]==1)
dfs2(i,i);
}
for(int i=1;i<=m;++i){
a=read();
b=read();
cout<<lca(a,b)<<endl;
}
return 0;
}