#include<bits/stdc++.h>
using namespace std;
int n,m,ut,vt,root,fa[500010];
vector<int> g[500010];
bool vis[500010];
vector<pair<int,int> > ask[500010];
int ans[500010];
void init() {
for (int i = 1;i <= n;i ++)
fa[i] = i;
return;
}
int find(int x) {
while (fa[fa[x]] != fa[x]) fa[x] = fa[fa[x]];
return fa[x];
}
void unionn(int x,int y) {
fa[find(y)] = find(x);
return;
}
void tarjan(int u) {
vis[u] = true;
for (int i = 0;i < g[u].size();i ++) {
int v = g[u][i];
if (!vis[v]) {
tarjan(v);
unionn(u,v);
}
}
for (int i = 0;i < ask[u].size();i ++) {
int v = ask[u][i].first;
if (vis[v]) ans[ask[u][i].second] = find(v);
}
return;
}
int main() {
scanf("%d%d%d",&n,&m,&root);
for (int i = 1;i <= n - 1;i ++) {
scanf("%d%d",&ut,&vt);
g[ut].push_back(vt);
g[vt].push_back(ut);
}
for (int i = 1;i <= m;i ++) {
scanf("%d%d",&ut,&vt);
ask[ut].push_back(make_pair(vt,i));
ask[vt].push_back(make_pair(ut,i));
}
init();
tarjan(root);
for (int i = 1;i <= m;i ++)
printf("%d\n",ans[i]);
return 0;
}