#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
struct node
{
int ki,l,r,next;
}a[N];
struct ty
{
int last,next;
}sum[N];
void get(int x)
{
int a=sum[x].last,b=sum[x].next;
sum[a].next=b;
sum[b].last=a;
}
int n;
int tot,tail,c[N];
void add(int k,int li,int ri)
{
for(int i=li;i<=ri;i++)
{
sum[i].next=i+1;
sum[i+1].last=i;
}
a[++tot]=(node){k,li,ri,tot+1};
a[tail].next=tot;
tail=tot;
}
int del()
{
int las=0;
for(int i=a[0].next;a[i].r<=n;i=a[i].next)
{
// printf("%d %d %d %d\n",i,a[i].l,a[i].r,a[i].next);
printf("%d ",a[i].l);
get(a[i].l);
a[i].l=sum[a[i].l].next;
if(a[i].l>a[i].r)
{
int u=las,v=a[i].next;
sum[a[u].r].next=a[v].l;
sum[a[v].l].last=a[u].r;
if(a[las].ki!=a[v].ki)
{
a[u].next=a[i].next;
}
else
{
a[u].next=a[v].next;
a[u].r=a[v].r;
}
// printf(" %d %d %d %d\n",u,a[u].l,a[u].r,a[u].next);
// a[las].r=a[i].r;
}
else
{
las=i;
}
// printf(" %d %d %d %d\n",i,a[i].l,a[i].r,a[i].next);
}
return las;
}
int main()
{
scanf("%d",&n);
tail=0;
a[0]=(node){-1,0,0,0};
sum[0].next=1;
sum[0].last=0;
int las=1;
for(int i=1;i<=n;i++)
{
scanf("%d",&c[i]);
if(i!=1&&c[i]!=c[i-1])
{
add(c[i-1],las,i-1);
las=i;
}
}
if(c[n]==c[n-1])
{
add(c[n],las,n);
}
add(-1,n+1,n+1);
while(del())
{
printf("\n");
}
}
// 10 1 1 1 1 1 0 0 0 0 0