#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+4;
int n,m,rt,vis[N],ans[N],f[N],u,v;
vector<int> e[N],id[N],qr[N];
int find(int x){
return f[x]==x ? x : f[x]=find(f[x]);
}
inline void Add(int u,int v,int cnt){
id[u].emplace_back(cnt);
id[v].emplace_back(cnt);
qr[u].emplace_back(v);
qr[v].emplace_back(u);
}
void tarjan(int x){
vis[x]=1;
for(int i : e[x]){
if(!vis[i]){
tarjan(i);
f[i]=x;
}
}
for(int i=0;i<qr[x].size();++i){
int k=qr[x][i],cnt=id[x][i];
if(vis[k]==2){
ans[cnt]=find(k);
}
}
vis[x]=2;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
cin>>n>>m>>rt;
for(int i=1;i<=n;++i) f[i]=i;
for(int i=1;i<n;++i){
cin>>u>>v;
e[u].emplace_back(v);
e[v].emplace_back(u);
}
for(int i=1;i<=m;++i){
cin>>u>>v;
Add(u,v,i);
}
tarjan(rt);
for(int i=1;i<=n;++i) cout<<ans[i]<<"\n";
return 0;
}
码风可能不太好,请见谅