#include <bits/stdc++.h>
#define ll long long
#define INF 0x7fffffff
#define mod 998244353
#define f(j,k) for(int i = j ; i <= k ; i++)
#define f1(j,k) for(int i = j ; i >= k ; i--)
#define exp 1e-7
#define PLL pair<ll,ll>
const ll N = 300005;
const ll P = 1000000007;
const int base = 5;
const ll hashmod = 1e12 + 39;
using namespace std;
inline ll lowbit(ll x) {return x & -x;}
using i64 = long long;
void solve()
{
ll n,m,s;
cin >> n >> m >> s;
vector<vector<ll>> edge(n + 1);
for(int i = 1 ; i < n ; i++)
{
ll u,v;
cin >> u >> v;
edge[u].push_back(v);
edge[v].push_back(u);
}
vector<ll> dep(n + 1);
vector<vector<ll>> fa(n + 1 , vector<ll> (35));
function<void(ll,ll)> dfs = [&](ll now,ll father)->void{
dep[now] = dep[father] + 1;
fa[now][0] = father;
for(int i = 1 ; (1 << i) <= dep[now] ; i++)
fa[now][i] = fa[fa[now][i - 1]][i - 1];
for(auto x : edge[now])
if(x != father)
dfs(x,now);
};
dfs(s,0);
function<ll(ll,ll)> lca = [&](ll u,ll v)->ll{
ll depu = dep[u],depv = dep[v];
if(depu < depv)
{
swap(u,v);
swap(depu,depv);
}
ll dis = depu - depv;
if(dis)
{
for(int i = 0 ; i <= 20 ; i++)
{
if((1 << i) & dis)
u = fa[u][i];
}
}
if(u == v)
return u;
for(int i = 20 ; i >= 0 ; i--)
{
if(dep[u] < (1 << i))
continue;
if(fa[u][i] != fa[v][i])
{
u = fa[u][i];
v = fa[v][i];
}
}
return fa[u][0];
};
while(m--)
{
ll a,b;
cin >> a >> b;
cout << lca(a,b) << endl;
}
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
ll _ = 1;
while(_--)
solve();
return 0;
}