#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5,LOGN = 20;
int n,m,s,fa[N][LOGN],dep[N];
vector<int> gra[N];
void bdtr(int k)
{
dep[k] = dep[fa[k][0]] + 1;
for (int i = 1;fa[k][i - 1];i++) fa[k][i] = fa[fa[k][i - 1]][i - 1];
for (auto son: gra[k])
if (son != fa[k][0])
{
fa[son][0] = k;
bdtr(son);
}
}
int lca(int a,int b)
{
if (dep[a] < dep[b]) swap(a,b);
for (int i = LOGN - 1;dep[a] > dep[b];i--)
if (dep[fa[a][i]] >= dep[b]) a = fa[a][i];
for (int i = LOGN - 1;i;i--)
if (fa[a][i] != fa[b][i])
{
a = fa[a][i];
b = fa[b][i];
}
if (dep[a] <= 1 || dep[b] <= 1) return s;
else return fa[a][0];
}
int main()
{
int x,y,a,b;
cin >> n >> m >> s;
for (int i = 1;i < n;i++)
{
cin >> x >> y;
gra[x].push_back(y);
gra[y].push_back(x);
}
bdtr(s);
for (int i = 1;i <= m;i++)
{
cin >> a >> b;
cout << lca(a,b) << endl;
}
return 0;
}