#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,root;
vector<int> child[N];
vector<int> l(N+1,0),r(N+1,0);
vector<bool> hashfa(N+1,false);
void dfs_xian(int x){
cout<<x<<" ";
if(l[x]!=0) dfs_xian(l[x]);
if(r[x]!=0) dfs_xian(r[x]);
return;
}
void dfs_zhong(int x){
if(l[x]!=0) dfs_zhong(l[x]);
cout<<x<<" ";
if(r[x]!=0) dfs_zhong(r[x]);
return;
}
void dfs_hou(int x){
if(l[x]!=0) dfs_hou(l[x]);
if(r[x]!=0) dfs_hou(r[x]);
cout<<x<<" ";
return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n;
int x,y;
for(int i=1;i<=n-1;i++){
cin>>x>>y;
child[x].push_back(y);
hashfa[y]=true;
}
for(int i=1;i<=n;i++){
if(!hashfa[i]){
root=i;
break;
}
}
for(int i=1;i<=n;i++){
if(child[i].size()==2){
l[i]=min(child[i][0],child[i][1]);
r[i]=max(child[i][0],child[i][1]);
}else if(child[i].size()==1){
if(child[i][0]>i){
l[i]=child[i][0];
}else{
r[i]=child[i][0];
}
}
}
dfs_xian(root);cout<<endl;
dfs_zhong(root);cout<<endl;
dfs_hou(root);cout<<endl;
return 0;
}