#include<bits/stdc++.h>
using namespace std;
const int N = 500010;
int n, m, s;
int head[N * 2], ne[N * 3], v[N * 3], cnt;
int pos[N * 2], seq[N * 5], d[N * 5], tot, vis[N * 2];
int f[N][30];
void add(int x, int y)
{
v[++cnt] = y, ne[cnt] = head[x], head[x] = cnt;
}
void dfs(int x, int de)
{
vis[x] = 1;
pos[x] = ++tot;
seq[tot] = x;
d[tot] = de;
for(int i = head[x];i;i = ne[i])
{
if(vis[v[i]]) continue;
dfs(v[i], de + 1);
seq[++tot] = x;
d[tot] = de;
}
}
void build()
{
for(int i = 1;i <= tot;i ++) f[i][0] = i;
int t = log2(tot);
for(int j = 1;j <= t;j ++)
for(int i = 1;i <= tot - (1 << j) + 1;i ++)
if(d[f[i][j - 1]] < d[f[i + (1 << (j - 1))][j - 1]])
{
f[i][j] = f[i][j - 1];
}
else f[i][j] = f[i + (1 << (j - 1))][j - 1];
}
int lca(int x, int y)
{
int l = pos[x], r = pos[y];
if(l > r) swap(l, r);
int t = log2(r - l + 1);
if(d[f[l][t]] < d[f[r - (1 << t) + 1][t]])
{
return seq[f[l][t]];
}
else return seq[f[r - (1 << t) + 1][t]];
}
int main()
{
cin >> n >> m >> s;
int a, b;
for(int i = 1;i <= n - 1;i ++)
{
cin >> a >> b;
add(a, b);
add(b, a);
}
dfs(s, 1);
build();
while(m --)
{
cin >> a >> b;
cout << lca(a, b) << endl;
}
return 0;
}