#include<bits/stdc++.h>
#define de(x) cout<<#x<<"="<<x<<endl;
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define repd(i,a,b) for(int i=a;i>=(b);--i)
#define ll long long
#define mt(a,b) memset(a,b,sizeof(a))
#define fi first
#define se second
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define pdd pair<double,double>
#define pdi pair<double,int>
#define mp(u,v) make_pair(u,v)
#define sz(a) a.size()
#define ull unsigned long long
#define ll long long
#define pb push_back
#define PI acos(-1.0)
const int mod = 1e9+7;
const int maxn = 1e3+5;
const double EPS = 1e-6;
using namespace std;
struct node{
int v,sum;
}tree[2*2*maxn];
int a[maxn];
int n;
void buildtree(int k){
if(k>n) return;
tree[k].v=a[k];
buildtree(k<<1);
buildtree((k<<1)+1);
tree[k].sum=tree[(k<<1)].v+tree[(k<<1)+1].v;
}
void xianxu1(int k){//先序输出(递归)
if(tree[k].v==0) return;
printf("%d ",tree[k].v);
xianxu1(k<<1);
xianxu1((k<<1)+1);
}
void xianxu2(){//先序输出(非递归)
stack<int> st;
st.push(1);
int k=1;
while(st.size()){
while(tree[k].v!=0){
printf("%d ",tree[k].v);
if(tree[2*k].v!=0||tree[2*k+1].v!=0) st.push(k);
k=2*k;
}
k=st.top();
k=2*k+1;
st.pop();
// if(tree[2*k+!].v!=0) printf("%d ",tree[2*k+1].v);
}
}
void zhongxu1(int k){//中序输出(递归)
if(tree[k].v==0) return;
zhongxu1(k<<1);
printf("%d ",tree[k].v);
zhongxu1((k<<1)+1);
}
void zhongxu2(){//中序输出(非递归)
stack<int> st;
st.push(1);
int k=1;
while(st.size()||tree[k].v!=0){
while(tree[k].v!=0){
//printf("%d ",tree[k].v);
// if(tree[2*k].v!=0||tree[2*k+1].v!=0) {
// de(k);
// st.push(k);
// }
if(k!=1) st.push(k);
k=2*k;
}
k=st.top();
//de(k);
printf("%d ",tree[k].v);
k=2*k+1;
st.pop();
// if(tree[2*k+!].v!=0) printf("%d ",tree[2*k+1].v);
}
}
void houxu1(int k){//后序输出(递归)
if(tree[k].v==0) return;
houxu1(k<<1);
houxu1((k<<1)+1);
printf("%d ",tree[k].v);
}
int main()
{
mt(tree,0);
scanf("%d",&n);
rep(i,1,n+1) scanf("%d",a+i);
buildtree(1);
// rep(i,1,n+1) printf("%d ",tree[i].v);
// xianxu1(1);
// cout<<endl;
// xianxu2();
// zhongxu1(1);
// cout<<endl;
// zhongxu2();
houxu1(1);
return 0;
}
/*
本篇代码记录的是二叉树的数组建树,和先序输出(递归和非递归),中序输出(递归和非递归),还有后序输出(递归)
*/