#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
using namespace std;
int a[100010][2];
void dfs1(int x){
printf("%d ",x);//把输出放在两个if语句前
if(a[x][1]){
dfs1(a[x][1]);
}
if(a[x][2]){
dfs1(a[x][2]);
}
return ;//前序遍历
}void dfs2(int x){
if(a[x][1]){
dfs2(a[x][1]);
}
printf("%d ",x);//把输出放在两个if语句中
if(a[x][2]){
dfs2(a[x][2]);
}
return ;//中序遍历
}void dfs3(int x){
if(a[x][1]){
dfs2(a[x][1]);
}
if(a[x][2]){
dfs2(a[x][2]);
}
printf("%d ",x);//把输出放在两个if语句后
return ;//后序遍历
}
int main(){
int n;cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=2;j++){
scanf("%d",&a[i][j]);
}
}
dfs1(1);
cout<<"\n";
dfs2(1);
cout<<"\n";
dfs3(1);
return 0;
}
//♂_The_LYH_25_♂