#include <bits/stdc++.h>
using namespace std;
struct node{
vector<int> v;
int l,r;
node* nxt;
node* pr;
node():l(0),r(1),nxt(NULL),pr(NULL){}
} ;
node *start=new node;
int main()
{
freopen("fruit3.in","r",stdin);
int n,x,px,le=1,ri;
scanf("%d%d",&n,&px);
node *now=start;
for(int i=2;i<=n;i++)
{
scanf("%d",&x);
if(x!=px)
{
ri=i-1;
node *t=new node;
t->v.push_back(le);
t->v.push_back(ri);
t->l=0;
t->r=1;
now->nxt=t;
t->pr=now;
now=t;
le=i;
px=x;
}
}
node *t=new node;
t->v.push_back(le);
t->v.push_back(n);
t->l=0;t->r=1;
t->nxt=NULL;
now->nxt=t;
t->pr=now;
now=start->nxt;
int tot=0;
node *pre;
while(start->nxt!=NULL)
{
now=start->nxt;
while(now!=NULL&&now->l > now->r)
{
now=now->nxt;
}
if(now==NULL) break;
start->nxt=now;
pre=start;
while(now)
{
int k=now->l;
printf("%d ",now->v[k]);
tot++;
now->v[k]++;
if(now->v[k] >now->v[k+1])
{
now->l+=2;
}
if(pre!=start && pre->l > pre->r)
{
if(pre->pr==start)
{
start->nxt=now;
now->pr=start;
pre=now;
now=now->nxt;
continue;
}
for(int i=now->l;i<=now->r;i++)
{
pre->pr->v.push_back(now->v[i]);
}
if(now->r>now->l)
pre->pr->r+= now->r - now->l + 1;
pre->pr->nxt=now->nxt;
now->nxt->pr=pre->pr;
now=now->nxt;
pre=pre->pr;
continue;
}
if(now->nxt==NULL && now->l>now->r)
{
pre->nxt=NULL;
now=now->nxt;
break;
}
pre=now;
if(now->nxt==NULL) break;
now=now->nxt;
}
printf("\n");
if(tot>=n) break;
}
return 0;
}