#include<bits/stdc++.h>
using namespace std;
int n,m,s,deep[500001],h[500001],fa[500001][20];
struct node {
int v,next;
}edge[1000002];
void ae (int a,int u,int v) {
edge[a].v=v;
edge[a].next=h[u];
h[u]=a;
return;
}
void dfs (int u,int lfa) {
for (int a=h[u];a;a=edge[a].next) {
int v=edge[a].v;
if (v==lfa) continue;
deep[v]=deep[u]+1;
fa[v][0]=u;
for (int b=1;(1<<b)<=deep[u];b++) fa[v][b]=fa[fa[v][b-1]][b-1];
dfs(v,u);
}
}
int lca (int x,int y) {
if (deep[x]>deep[y]) swap(x,y);
for (int a=19;a>=0;a--) if (deep[x]<=deep[y]-(1<<a)) y=fa[y][a];
if (x==y) return x;
for (int a=19;a>=0;a--) {
if (fa[x][a]==fa[y][a]) continue;
else {
x=fa[x][a];
y=fa[y][a];
}
}
return fa[x][0];
}
int main () {
cin >>n>>m>>s;
for (int a=1;a<n;a++) {
int x,y;
cin >>x>>y;
ae(2*a-2,x,y);
ae(2*a-1,y,x);
}
deep[s]=1;
dfs(s,0);
for (int a=1;a<=m;a++) {
int x,y;
cin >>x>>y;
cout <<lca(x,y)<<endl;
}
return 0;
}