#include<bits/stdc++.h>
using namespace std;
const int K = 500010;
const int T = K*2;
int e[K],h[T],ne[T],idx;
int depth[K],fa[K][19],q[K];
void add(int a,int b)
{
e[idx] = b;
ne[idx] = h[a];
h[a] = idx++;
}
void bfs(int root)
{
memset(depth,0x3f,sizeof depth);
depth[0] = 0;
depth[root] = 1;
int hh = 0;
int tt = 0;
q[0] = root;
while(hh<=tt)
{
int t = q[hh++];
for(int i = h[t];i>=0;i = ne[i])
{
int j = e[i];
if(depth[j]>depth[t]+1)
{
depth[j] = depth[t]+1;
q[++tt] = j;
fa[j][0] = t;
for(int k = 1;k<=19;k++)
fa[j][k] = fa[fa[j][k-1]][k-1];
}
}
}
}
int lca(int a,int b)
{
if(depth[a]<depth[b]) swap(a,b);
for(int k = 18;k>=0;k--)
if(depth[fa[a][k]]>=depth[b]) a = fa[a][k];
if(a==b) return a;
for(int k = 18;k>=0;k--)
{
if(fa[a][k]!=fa[b][k])
{
a = fa[a][k];
b = fa[b][k];
}
}
return fa[a][0];
}
int main()
{
int N,M,S;
cin>>N>>M>>S;
memset(h,-1,sizeof h);
for(int i = 0;i<N-1;i++)
{
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
bfs(S);
while(M--)
{
int a,b;
cin>>a>>b;
cout<<lca(a,b)<<endl;
}
return 0;
}