rt
#include<bits/stdc++.h>
using namespace std;
int n=0,m=0,root=0,md=0;
int deep[500001]={0};
int dad[500001][31]={0};
int lg[500001]={0};
vector<int> g[500001];
void dfs(int x,int s) {
deep[x]=s;
md=max(deep[x],md);
for(int i=0;i<g[x].size();i++) {
int y=g[x][i];
if(dad[x][0]!=y) {
dad[y][0]=x;
dfs(y,s+1);
}
}
}
int lca(int x,int y) {
if(deep[x]<deep[y]) swap(x,y);
int i=31;
while(deep[x]!=deep[y]) {
if((deep[x]-deep[y])&(1<<i)) {
x=dad[x][i];
}
i--;
}
for(int i=lg[deep[x]];i>=0;i--) {
if(x!=y) {
x=dad[x][i];
y=dad[y][i];
}
}
return x;
}
int main() {
cin>>n>>m>>root;
for(int i=0;i<n-1;i++) {
int u=0,v=0;
cin>>u>>v;
int x=0,y=0;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(root,0);
for(int i=1,j=0;i<md;i++) {
if(i>=(1<<(j+1))) {
j++;
}
lg[i]=j;
}
for(int i=1;i<=n;i++) {
int x=i;
for(int j=1,k=1;deep[x]>0;j++) {
x=dad[x][0];
if(j==(1<<k)) {
dad[i][k]=x;
k++;
}
}
}
for(int i=0;i<m;i++) {
int u=0,v=0;
cin>>u>>v;
int d=lca(u,v);
cout<<d<<endl;
}
return 0;
}