#include using namespace std; #define rep(i,n) for(int i=0;i<(int)(n);i++) #define rrep(i,n) for(int i=(int)(n-1);i>=0;i--) #define ALL(v) v.begin(),v.end() #define RALL(v) v.rbegin(),v.rend() template using V=vector; template using VV=V>; using u128=__int128_t; using ll=long long; V PruferEncode(VV& G){ int n=G.size(); V ret,deg(n); rep(v,n) deg[v]=G[v].size(); priority_queue,greater> que; rep(v,n) if(deg[v]==1) que.push(v); rep(i,n-2){ auto u=que.top(); que.pop(); int v; for(auto nv:G[u]){ if(deg[nv]){ v=nv; break; } } ret.push_back(v); deg[u]=0; deg[v]--; if(deg[v]==1) que.push(v); } return ret; } V> PruferDecode(V& P){ int n=P.size()+2; V cnt(n); for(auto v:P) cnt[v]++; priority_queue,greater> que; rep(v,n) if(cnt[v]==0) que.push(v); V> ret; rep(i,n-2){ auto u=que.top(); que.pop(); int v=P[i]; ret.push_back(make_pair(u,v)); cnt[v]--; if(cnt[v]==0) que.push(v); } auto u=que.top(); que.pop(); auto v=que.top(); que.pop(); ret.push_back(make_pair(u,v)); return ret; } int main(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); string s; int n; cin>>s>>n; cout< G(n); rep(i,n-1){ int u,v; cin>>u>>v; u--,v--; G[u].push_back(v); G[v].push_back(u); } auto P=PruferEncode(G); rep(i,n-2){ if(i) cout<<" "; cout< P(n-2); rep(i,n-2){ cin>>P[i]; P[i]--; } auto G=PruferDecode(P); rep(i,n-1) cout<