#include<bits/stdc++.h>
using namespace std;
#define Max 500050
long long N,M,S,fa[Max],ans[Max];
int vis[Max];
vector<long long>v[Max],vq[Max],id[Max];
void init(){
memset(vis,false,sizeof(vis));
for(int i=0;i<N;i++){
fa[i]=i;
}
return;
}
int find(int x){
return fa[x]==x?fa[x]:fa[x]=find(fa[x]);
}
void join(int a,int b){
int ra=find(a),rb=find(b);
if(ra!=rb){
fa[a]=b;
}
return;
}
void tarjan(int x){
vis[x]=1;
for(int i=0;i<v[x].size();i++){
int r=v[x][i];
if(vis[r]==0){
tarjan(r);
fa[r]=x;
}
}
for(int i=0;i<vq[x].size();i++){
int ux=vq[x][i],it=id[x][i];
if(vis[ux]==2){
ans[it]=find(ux);
}
}
vis[x]=2;
return;
}
int main(){
cin>>N>>M>>S;
init();
for(int i=0;i<N-1;i++){
int x,y;
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
for(int i=1;i<=M;i++){
int x,y;
cin>>x>>y;
if(x==y){
ans[i]=x;
}
else{
vq[x].push_back(y);
vq[y].push_back(x);
id[y].push_back(i);
id[x].push_back(i);
}
}
tarjan(S);
for(int i=1;i<=M;i++){
cout<<ans[i]<<endl;
}
return 0;
}
rt