#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read();
const ll NUM = 5e5 + 5;
ll n, q, s, fa[NUM][31], d[NUM], maxd;
vector<ll> pos[NUM];
void BUILD(ll x, ll f) {
fa[x][0] = f, d[x] = d[f] + (x != f), maxd = max(maxd, d[x]);
for (ll i = 0; i < pos[x].size(); i++)
if (pos[x][i] != f) BUILD(pos[x][i], x);
}
int main() {
cin.tie(0), cout.tie(0) ->sync_with_stdio(0);
n = read(), q = read(), s = read();
for (ll u, v, i = 1; i < n; i++) {
u = read(), v = read();
pos[u].push_back(v), pos[v].push_back(u);
} BUILD(s, s);
for (ll pw = 1; pw <= 30; pw++)
for (ll i = 1; i <= n; i++)
fa[i][pw] = fa[fa[i][pw - 1]][pw - 1];
for (ll u, v; q; q--) {
u = read(), v = read();
if (d[u] < d[v]) swap(u, v);
ll b = d[u] - d[v], a = 0;
while (b) {
if (b & 1) u = fa[u][a];
a++, b >>= 1;
}
for (ll i = 30; i >= 0; i--) {
if (fa[u][i] != fa[v][i]) u = fa[u][i], v = fa[v][i];
}
cout << fa[u][0] << '\n';
}
return 0;
}
inline ll read() {
ll x = 0, f = 1;
char ch = getchar();
while (ch < '0' || '9' < ch)
f = ch != '-', ch = getchar();
while ('0' <= ch && ch <= '9')
x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar() ;
return f? x: -x;
}