#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;
#define getar(ar,n) for(ll i=0;i<n;++i) cin>>ar[i]
#define show(n) cout<<n<<'\n'
#define all(v) v.begin(), v.end()
#define br cout<<"\n"
#define pb push_back
#define nl '\n'
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define ret return
#define ll long long
#define ld long double
#define sza(x) ((int)x.size())
#define fi first
#define se second
const int mxN = 1e5+100;
const ll MOD = 1e9 + 7;
const ll INF = 1e9;
const ld EPS = 1e-9;
vector<ll> adj[mxN],new_adj[mxN];
bool changed1[mxN],changed2[mxN];
ll ans1=0,ans2=0,pos1[mxN],pos2[mxN];
/*ll dist[mxN][mxN],seen[mxN];
vector<pair<ll,pair<ll,ll>>> vec;
*/
void dfs(ll u=1,ll par=-1){
ll cnt=0;
for(auto it:new_adj[u]){
if(it!=par){
dfs(it,u);
if(!changed1[it]) ++cnt;
}
}
ans1+=cnt*2;
if(cnt>0){
if(par!=-1){
adj[u].erase(find(all(adj[u]),par));
adj[par].erase(find(all(adj[par]),u));
}
pos1[adj[u][0]]=u;
pos1[u]=adj[u].back();
changed1[u]=1;
for(ll i=1;i<adj[u].size();++i){
pos1[adj[u][i]]=adj[u][i-1];
}
}
if(u==1&&cnt==0){
ans1+=2;
pos1[u]=1;
swap(pos1[u],pos1[new_adj[u][0]]);
}
}
/*void dfs2(ll u,ll v,ll par,ll d){
if(par!=-1) dist[u][v]=d;
if(par!=-1) vec.pb({d,{u,v}});
for(auto it:new_adj[v]){
if(it!=par){
dfs2(u,it,v,d+1);
}
}
}*/
void lets_go() {
ll n,u,v;cin>>n;
for(ll i=0;i<n-1;++i){
cin>>u>>v;
adj[u].pb(v);
adj[v].pb(u);
new_adj[u].pb(v);
new_adj[v].pb(u);
}
dfs();
/* for(ll i=1;i<=n;++i) dfs2(i,i,-1,0);
sort(all(vec),greater<pair<ll,pair<ll,ll>>>());
for(auto it:vec){
u=it.se.fi,v=it.se.se;
if(!seen[u]&&!seen[v]){
ans2+=it.fi*2,seen[u]=1,seen[v]=1,pos2[u]=v,pos2[v]=u;
//cout<<u<<" "<<v<<" "<<it.fi<<nl;
}
}
for(ll i=1;i<=n;++i){
if(!seen[i]){
pos2[i]=i;
swap(pos2[i],pos2[new_adj[i][0]]);
}
}*/
cout<<ans1<<" "<<1<<nl;
for(ll i=1;i<=n;++i) cout<<pos1[i]<<" ";
br;
for(ll i=1;i<=n;++i) cout<<1<<" ";
br;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
lets_go();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |