#include <bits/stdc++.h>
using namespace std;
int n, q, F;
int d[600005];
int fa[600005][25];
int head[600005];
struct Node {
int v, nex;
} e[12000005];
int ecnt;
void add(int u, int v) {
ecnt++;
e[ecnt].v = v;
e[ecnt].nex = head[u];
head[u] = ecnt;
}
void dfs(int father, int root) {
d[root] = d[father] + 1;
fa[root][0] = father;
for (int i = 1; i <= 19; i++) {
fa[root][i] = fa[fa[root][i - 1]][i - 1];
}
for (int i = head[root]; i != 0; i = e[i].nex) {
int v = e[i].v;
if (v != father) {
dfs(root, v);
}
}
return;
}
int LCA(int a, int b) {
if (d[a] < d[b]) {
swap(a, b);
}
for (int i = 19; i >= 0; i--) {
if (d[fa[a][i]] >= d[b]) {
a = fa[a][i];
}
}
if (a == b) {
return a;
}
for (int i = 19; i >= 0; i--) {
if (d[fa[a][i]] != d[fa[b][i]]) {
a = fa[a][i];
b = fa[b][i];
}
}
return fa[a][0];
}
int main() {
cin >> n >> q >> F;
for (int i = 1; i <= n - 1; i++) {
int a, b;
cin >> a >> b;
add(a, b);
add(b, a);
}
dfs(0, F);
while (q--) {
int a, b;
cin >> a >> b;
cout << LCA(a, b) << "\n";
}
return 0;
}