#include<bits/stdc++.h>
#define UP(i,a,b) for(int i=a;i<=b;i++)
#define DN(i,a,b) for(int i=a;i>=b;i--)
#define int long long
const int M=500005;
using namespace std;
int n,m,s;
int fa[M][25];
int deep[M];
int lg[M];
bool vis[M];
vector<int> edge[M];
inline void dfs(int s,int f)
{
int t=0;
fa[s][0]=f;
vis[s]=1;
deep[s]=deep[f]+1;
t=deep[s];
UP(i,1,t) fa[s][i]=fa[fa[s][i-1]][i-1];
UP(i,0,edge[s].size()-1)
{
int v=edge[s][i];
if(v!=f)
{
fa[v][0]=s;
dfs(v,s);
}
}
return;
}
inline int LCA(int u,int v)
{
if(deep[u]<deep[v]) swap(u,v);
while(deep[u]>deep[v])
{
int g=lg[deep[u]-deep[v]];
u=fa[u][g];
}
if(u==v) return u;
DN(i,lg[deep[u]],0)
{
if(fa[u][i]!=fa[v][i])
{
u=fa[u][i];
v=fa[v][i];
}
}
return fa[u][0];
}
signed main()
{
//freopen("P3379_1.in","r",stdin);
cin>>n>>m>>s;
UP(i,1,n-1)
{
int u,v;
cin>>u>>v;
edge[u].push_back(v);
edge[v].push_back(u);
}
int j=2,k=0;
UP(i,1,(n<<1)-1)
{
if(i==j)
{
j<<=1;
k++;
}
lg[i]=k;
}
dfs(s,0);
UP(i,1,m)
{
int a,b;
cin>>a>>b;
cout<<LCA(a,b)<<"\n";
}
return 0;
}