#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N],n,tot,L=1,R,head=1;
vector<vector<int> > ans;
struct node {
int l,r,tag,pre,nxt;
}; node l[N];
void Insert(int i) {
++tot; l[tot]=node{L,R,a[L],tot-1,tot+1}; L=R=i;
}
void Delete(int i) {
if(i==head) head=l[i].nxt;
l[l[i].pre].nxt=l[i].nxt;
l[l[i].nxt].pre=l[i].pre;
}
int main() {
//freopen("fruit.in","r",stdin);
//freopen("fruit.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%d",&a[i]);
if(a[L]==a[i])
R=i;
else
Insert(i);
}
Insert(n);
l[tot].nxt=0;
bool flag=true;
while(flag) {
flag=false; vector<int> v;
int p=l[head].tag;
for(int i=head;i;i=l[i].nxt) {
if(l[i].tag!=p) continue; flag=true;
v.push_back(l[i].l); l[i].l++; p^=1;
if(l[i].l>l[i].r)
Delete(i);
}
ans.push_back(v);
}
for(int i=0;i<ans.size();i++) {
for(int j=0;j<ans[i].size();j++) {
printf("%d",ans[i][j]);
if(j!=ans[i].size()-1)
putchar(' ');
}
if(i!=ans.size()-1)
putchar('\n');
}
return 0;
}
TLE #8 #9