#include<bits/stdc++.h>
#define int long long
using namespace std;
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-'0';ch=getchar();}return x*f;}
const int MAXN=5e5+10;
int fa[MAXN][30],d[MAXN],n,m,s,u,v,x,y;
vector<int> g[MAXN];
void dfs(int u,int f){
fa[u][0]=f;
d[u]=d[f]+1;
for(auto v:g[u]){
if(u!=v)dfs(v,u);
}
}
int lca(int u,int v){
if(d[u]<d[v])swap(u,v);
for(int i=22;i>=0;i--){
if(d[fa[u][i]]>=d[v])u=fa[u][i];
}
if(u==v)return u;
for(int i=22;i>=0;i--){
if(fa[u][i]!=fa[v][i]){
u=fa[u][i];
v=fa[v][i];
}
}
return fa[u][0];
}
signed main(){
n=read(),m=read(),s=read();
for(int i=1;i<n;i++){
u=read(),v=read();
g[u].push_back(v);
g[v].push_back(u);
}
dfs(s,0);
for(int j=1;(1<<j)<=n;j++)
for(int i=1;i<=n;i++)fa[i][j]=fa[fa[i][j-1]][j-1];
while(m--){
x=read(),y=read();
printf("%lld\n",lca(x,y));
}
return 0;
}