#include<bits/stdc++.h>
using namespace std;
struct point{
int to;
int next;
}edge[500001];
int elen;
int head[500001];
int n,m,root;
int u,v;
bool vis[500001];
int f[500001][20];
int dep[500001];
int lg[500001];
void add(int from,int to){
++elen;
edge[elen].to=to;
edge[elen].next=head[from];
head[from]=elen;
}
void dfs(int cur,int fath){
if(vis[cur])return ;
vis[cur]=1;
f[cur][0]=fath;
dep[cur]=dep[fath]+1;
for(int i=1;i<=lg[dep[cur]];i++){
f[cur][i]=f[f[cur][i-1]][i-1];
}
for(int i=head[cur];i;i=edge[i].next){
dfs(edge[i].to,cur);
}
}
int lca(int a,int b){
if(dep[a]>dep[b])swap(a,b);
while(dep[a]<dep[b]){
b=f[b][lg[dep[b]-dep[a]]-1];
}
if(a==b)return a;
for(int i=lg[dep[a]]-1;i>=0;i--){
if(f[a][i]!=f[b][i]){
a=f[a][i];
b=f[b][i];
}
}
return f[a][0];
}
int main(){
scanf("%d%d%d",&n,&m,&root);
for(int i=1;i<n;i++){
scanf("%d%d",&u,&v);
add(v,u);
add(u,v);
}
lg[0]=-1;
for(int i=1;i<=n;i++){
lg[i]=lg[i>>1]+1;
}
dfs(root,0);
while(m--){
scanf("%d%d",&u,&v);
printf(" %d\n",u,v);
}
return 0;
}