#include<bits/stdc++.h>
using namespace std;
int n,m,s;
int dep[1000010],f[1000010][35];
vector<int> e[1000010];
int mymin(int x,int y)
{
return x<y? x:y;
}
int dfs(int u,int fa)
{
dep[u]=dep[fa]+1;
f[u][0]=fa;
for(int i=1;(1<<i)<=dep[u];i++)
f[u][i]=f[f[u][i-1]][i-1];
for(int i=0;i<e[u].size();i++)
{
if(e[u][i]==fa)
continue;
dfs(e[u][i],u);
}
}
int lca(int x,int y)
{
if(dep[x]>dep[y])
swap(x,y);
int d=dep[y]-dep[x];
for(int i=30;i>=0;i--)
{
if(d&(1<<i))
y=f[y][i];
}
if(x==y)
return x;
for(int i=30;i>=0;i--)
{
if(dep[x]>=(1<<i)&&f[x][i]!=f[y][i])
x=f[x][i],y=f[y][i];
}
return f[x][0];
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>s;
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
e[u].push_back(v);
e[v].push_back(u);
}
dfs(s,0);
int ans=INT_MAX;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
cout<<lca(u,v)<<'\n';
}
return 0;
}