#include<bits/stdc++.h>
using namespace std;
struct node{
long long data,lc,rc,d;
};
long long n,dep;
node t[300005];
void put(int s,int m,int ii){
long long ss = s;
while(1){
if(m <= t[ss].data){
if(t[ss].lc){
ss = t[ss].lc;
continue;
}else{
t[ss].lc = ii;
t[ii].d = t[ss].d + 1;
dep = max(dep,t[ii].d);
return;
}
}else {
if(t[ss].rc){
ss = t[ss].rc;
continue;
}else{
t[ss].rc = ii;
t[ii].d = t[ss].d + 1;
dep = max(dep,t[ii].d);
return;
}
}
}
}
void dfs3(int s){
if(s > 0){
if(t[s].lc){
dfs3(t[s].lc);
}
if(t[s].rc){
dfs3(t[s].rc);
}
cout << t[s].data << endl;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
cin >> t[1].data;
t[1].d = 1;
for(int i = 2,l;i <= n;i++){
cin >> l;
t[i].data = l;
put(1,l,i);
}
cout << "deep=" << dep << endl;
dfs3(1);
return 0;
}