#include <bits/stdc++.h>
using namespace std;
const int maxn=500005;
typedef long long ll;
int n,m,s;
int f[maxn];
bool vis[maxn];
int q1[maxn],q2[maxn];
int ans[maxn];
vector<int >e[maxn];
inline void read(int &x) {
x=0;int f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
x*=f;
}
inline void read(ll &x) {
x=0;int f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch))x=((x*10)+ch-'0'),ch=getchar();
x*=f;
}
void init()
{
for(int i=1;i<=n;i++)
{
f[i]=i;
vis[i]=0;
}
}
int find(int now,int tra)
{
if(f[now]==now)return now;
else if(f[now]==tra)return tra;
return f[now]=find(f[now],tra);
}
void DFS(int now,int fa)
{
for(int i=0;i<(int)e[now].size();i++)
{
int u=e[now][i];
if(fa==u)continue;
else
{
DFS(u,now);
}
}
f[now]=fa;
vis[now]=1;
for(int i=1;i<=m;i++)
{
if(q1[i]==now)
{
if(vis[q2[i]])
{
ans[i]=find(q2[i],now);
}
}
else if(q2[i]==now)
{
if(vis[q1[i]])
{
ans[i]=find(q1[i],now);
}
}
}
return ;
}
int main()
{
read(n);
read(m);
read(s);
init();
for(int i=1;i<=n-1;i++)
{
int f,t;
read(f);
read(t);
e[f].push_back(t);
e[t].push_back(f);
}
for(int i=1;i<=m;i++)
{
read(q1[i]);
read(q2[i]);
}
DFS(s,s);
for(int i=1;i<=m;i++)
{
printf("%d\n",ans[i]);
}
return 0;
}