其他都是AC
//#pragma GCC optimize(3)
#include<iostream>
#include<algorithm>
#include<queue>
#include<set>
#include<cmath>
#include<memory.h>
#include<map>
#include<iomanip>
#include<stack>
#define int long long
#define INF 0x7f
using namespace std;
inline int read() {
bool op=1;
char ch;
while((ch=getchar())<'0'||ch>'9'){
if(ch=='-'){
op=false;
}
}
int num=ch-'0';
while((ch=getchar())>='0'&&ch<='9') {
num=num*10+ch-'0';
}
return op?num:-num;
}
struct node{
int f;
int lc,rc;
int d;
int value;
};
node make_node(int b,int c){
node lre;
lre.d=c;
lre.value=b;
lre.lc=-1;
lre.rc=-1;
return lre;
}
int n,i,arr[300005];
int ma_d=0;
vector<node> v;
void build(int x,int num){
//cout<<"v["<<x<<"].value="<<v[x].value<<" and for "<<num<<endl;
if(num<=v[x].value){
if(v[x].lc==-1){
// cout<<"NEW!"<<endl;
v[x].lc=v.size();
v.push_back(make_node(num,v[x].d+1));
ma_d=max(v[x].d+1,ma_d);
}else{
build(v[x].lc,num);
}
}else{
if(v[x].rc==-1){
// cout<<"NEW!"<<endl;
v[x].rc=v.size();
v.push_back(make_node(num,v[x].d+1));
ma_d=max(ma_d,v[x].d+1);
}else{
build(v[x].rc,num);
}
}
}
void traverse(int x){
if(v[x].lc!=-1){
traverse(v[x].lc);
}
if(v[x].rc!=-1){
traverse(v[x].rc);
}
cout<<v[x].value<<endl;
}
signed main(){
n=read();
arr[1]=read();
v.push_back(make_node(arr[1],1));
for(i=2;i<=n;i++){
arr[i]=read();
build(0,arr[i]);
}
cout<<"deep="<<ma_d<<endl;
traverse(0);
return 0;
}