#include<bits/stdc++.h>
using namespace std;
const int MAXN = 200000+5;
int n;
int a[MAXN];
int tot;//水果数量
int nxt[MAXN]; //下一个水果
int pre[MAXN]; //上一个水果
int tott;//块的数量
int firt;//第一块的块编号
int head[MAXN];//当前块的第一个水果
int tail[MAXN];//当前块的最后一个水果
int pret[MAXN];//上一块的编号
int nxtt[MAXN];//下一块的编号
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
//freopen("fruit.in","r",stdin);
//freopen("fruit.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
nxt[i]=i+1;
pre[i]=i-1;
}
nxt[n]=0;
pre[1]=0;
tot=n;
//初始化分块
firt=1;
tott=1;
head[1]=1;
tail[1]=1;
nxtt[1]=0;
pret[1]=0;
for(int i=2;i<=n;i++){
if(a[i]==a[i-1]){
tail[tott]++;
}else{
nxtt[tott]=tott+1;
pret[tott+1]=tott;
tott++;
head[tott]=i;
tail[tott]=i;
nxtt[tott]=0;
}
}
while(tot>0){
//输出每个块的第一个水果,修改水果数量
for(int i=firt;i!=0;i=nxtt[i]){
cout<<head[i]<<" ";
tot--;
}
cout<<"\n";
//修改水果连接关系,删除大小为1的块
for(int i=firt;i!=0;i=nxtt[i])
{
pre[nxt[head[i]]]= pre[head[i]];
nxt[pre[head[i]]]= nxt[head[i]];
if(head[i]==tail[i]){
if(i==firt)
firt=nxtt[i];
pret[nxtt[i]]=pret[i];
nxtt[pret[i]]=nxtt[i];
}
else
head[i]=nxt[head[i]];
}
//合并同类块
for(int i=nxtt[firt];i!=0;i=nxtt[i])
{
int j=pret[i];
if(a[head[i]]==a[head[j]]){
tail[j]=tail[i];
pret[nxtt[i]]=pret[i];
nxtt[pret[i]]=nxtt[i];
}
}
/*
for(int i=firt;i!=0;i=nxtt[i])
cout<<i<<" "<<head[i]<<"~"<<tail[i]<<
" "<<pret[i]<<":"<<nxtt[i]<<endl;
cout<<"-----------------"<<endl;
*/
}
return 0;
}