#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 500010,M = 30;
int n,m,rt,x,y,dep[N],dp[N][M],lg[M];
vector <int> v[N];
void init()
{
for (int i = 2;i <= n;i++)
lg[i] = lg[i>>1]+1;
}
void dfs(int u,int fa,int deep)
{
dep[u] = deep;
dp[u][0] = fa;
for (int i = 1;i <= lg[deep];i++)
dp[u][i] = dp[dp[u][i-1]][i-1];
for (int i = 0;i < v[u].size();i++)
if (v[u][i] != fa)
dfs(v[u][i],u,deep+1);
}
int lca(int x,int y)
{
if (dep[x] < dep[y])
swap(x,y);
while (dep[x] > dep[y])
x = dp[x][lg[dep[x]-dep[y]]];
if (x == y)
return x;
for (int i = lg[dep[x]];i+1;i--)
if (dp[x][i] != dp[y][i])
x = dp[x][i],y = dp[y][i];
return dp[x][0];
}
void solve()
{
init();
scanf("%lld%lld%lld",&n,&m,&rt);
for (int i = 1;i < n;i++)
scanf("%lld%lld",&x,&y),v[x].push_back(y),v[y].push_back(x);
dfs(rt,-1,1);
while (m--)
scanf("%lld%lld",&x,&y),printf("%lld\n",lca(x,y));
}
signed main()
{
solve();
printf("\n");
return 0;
}
AC#3#4#5
WA#6#7#8#9
TLE#1#2#10#11#12#13#14