#include<bits/stdc++.h>
#pragma G++ optimize(1)
#pragma G++ optimize(2)
#pragma G++ optimize(3)
#pragma G++ optimize("Ofast")
#pragma G++ optimize("inline")
using namespace std;
inline int read()
{
int x=0,w=0;
char ch=getchar();
while(!isdigit(ch)) {w|=ch=='-',ch=getchar();}
while(isdigit(ch)) {x=(x<<3)+(x<<1)+(ch^48),ch=getchar();}
return w?-x:x;
} inline void write(int x)
{
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
struct node
{
int lch,rch;
}a[66];
int n;
void front(int p)
{
write(p),putchar(' ');
if(a[p].lch) front(a[p].lch);
if(a[p].rch) front(a[p].rch);
return ;
}
void middle(int p)
{
if(a[p].lch) middle(a[p].lch);
write(p),putchar(' ');
if(a[p].rch) middle(a[p].rch);
return ;
}
void back(int p)
{
if(a[p].lch) back(a[p].lch);
if(a[p].rch) middle(a[p].rch);
write(p),putchar(' ');
return ;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
{
a[i].lch=read(),a[i].rch=read();
}
front(1);
putchar('\n');
middle(1);
putchar('\n');
back(1);
return 0;
}