#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#define MAX 10000
using namespace std;
int tree[MAX];
void preverse(int x)
{
cout<<tree[x]<<" ";
if(tree[2*x+1] != 0)
preverse(2*x+1);
if(tree[2*x+2] != 0)
preverse(2*x+2);
}
void midverse(int x)
{
if(tree[2*x+1] != 0)
midverse(2*x+1);
cout<<tree[x]<<" ";
if(tree[2*x+2] != 0)
midverse(2*x+2);
}
void deverse(int x)
{
if(tree[2*x+1] != 0)
deverse(2*x+1);
if(tree[2*x+2] != 0)
deverse(2*x+2);
cout<<tree[x]<<" ";
}
int main() {
int n;
cin>>n;
for (int i = 0; i < n; ++i) {
cin>>tree[i];
}
preverse(0);
cout<<endl;
midverse(0);
cout<<endl;
deverse(0);
return 0;
}