#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int n,m,s,lg[500005],fa[500005][20],d[500005],v[500005];
vector <int> a[500005];
void dfs(int x,int p)
{
d[x]=d[p]+1; fa[x][0]=p;
for (int j=1;j<=lg[d[x]-1]+1;j++)
{
fa[x][j]=fa[fa[x][j-1]][j-1];
}
for (int i=0;i<a[x].size();i++)
{
if (!v[a[x][i]])
{
v[a[x][i]]=1;
dfs (a[x][i],x);
}
}
}
int LCA (int x,int y)
{
if (d[x]<d[y]) {int t=y; y=x;x=t;}
while (d[x]>d[y])
{
x=fa[x][lg[d[x]-d[y]]];
}
if (x==y) return x;
for (int i=lg[d[x]-1];i>=0;i--)
{
if (fa[x][i]!=fa[y][i])
{
x=fa[x][i]; y=fa[y][i];
}
}
return fa[x][0];
}
int main()
{ memset (v,0,sizeof(v));
cin>>n>>m>>s;
for (int i=1;i<=n-1;i++)
{
int x,y;
cin>>x>>y;
a[y].push_back(x);
a[x].push_back(y);
}
lg[0]=-1; lg[1]=0; int t=2;
for (int i=2;i<=n;i++)
{
if (i==t)
{
t*=2;
lg[i]=lg[i-1]+1;
}
else
{
lg[i]=lg[i-1];
}
}
v[s]=1;
dfs (s,s);
for (int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
cout<<LCA(x,y)<<endl;
}
}