#include <iostream>
#include <vector>
using namespace std;
int n, m, rt;
vector<int> e[500010];
int dd[5000010], f[500010];
bool vis[500010];
void dfs(int k, int dep) {
vis[k] = true;
dd[k] = dep;
for(auto i:e[k]) {
if(vis[i] == false) {
f[i] = k;
dfs(i, dep + 1);
}
}
}
int lca(int u, int v) {
while(dd[u] > dd[v])
u = f[u];
while(dd[u] < dd[v])
v = f[v];
while(u != v)
u = f[u], v = f[v];
return u;
}
int main() {
cin >> n >> m >> rt;
for(int i = 2;i <= n;i++) {
int u, v;
cin >> u >> v;
e[u].push_back(v);
e[v].push_back(u);
}
dfs(rt, 0);
for(int i = 1;i <= m;i++) {
int a, b;
cin >> a >> b;
cout << lca(a, b) << "\n";
}
return 0;
}