rt
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int q, m, n, x, y, fu;
int next[100002*2], first[100002*2], go[100002*2], tot;
int dep[100002*2], f[100002*2][21];
int Add(int u, int v)
{
next[++ tot] = first[u]; first[u] = tot; go[tot] = v;
next[++ tot] = first[v]; first[v] = tot; go[tot] = u;
}
void Deal(int u, int fa)
{
dep[u] = dep[fa] +1;
for(int i = 0; i <= 19; i ++)
f[u][i + 1] = f[f[u][i]][i];
for(int i = first[u]; i; i = next[i])
{
int v = go[i];
if(v == fa) continue;
f[v][0] = u;
Deal(v, u);
}
}
int LCA(int x, int y)
{
if(dep[x] < dep[y]) swap(x, y);
for(int i = 20; i >= 0; i --)
{
if(dep[f[x][i]] >= dep[y]) x = f[x][i];
if(x == y)return x;
}
for(int i = 20; i >= 0; i --)
{
if(f[x][i] != f[y][i])
{
x = f[x][i];
y = f[y][i];
}
}
return f[x][0];
}
int main()
{
scanf("%d%d%d", &n, &m, &fu);
for(int i = 1; i < n; i ++)
{
scanf("%d%d", &x, &y);
Add(x , y);
}
Deal(fu , 0);
while(m --)
{
scanf("%d%d", &x , &y);
printf("%d\n", LCA(x , y));
}
return 0;
}