RT
#include<bits/stdc++.h>
using namespace std;
char buf[1<<20],*p1,*p2;
#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin), p1 == p2) ? 0 : *p1++)
template<typename T>inline void readT(T &x){
bool f=1;x=0;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=!f;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
x=(f?x:-x);return;
}
template<typename T>
inline void writeT(T x){
if(x<0) putchar('-'),x=-x;
if(x>9) writeT(x/10);
putchar(x%10+'0');return;
}
struct k{
int last,next;
bool fruit,yes;
}a[200002];
int main()
{
int i,n,len=0,cut[200002]={},t;
readT(n);
for(i=1;i<=n;++i)
{
readT(a[i].fruit);
a[i].last=i-1;
a[i-1].next=i;
}
for(;len<n;)
{
t=0;
for(i=n;i>=1;i=a[i].last)
if(!a[i].yes)
if(i==1||a[i].fruit!=a[a[i].last].fruit)
{
a[i].yes=1;
a[a[i].last].next=a[i].next;
a[a[i].next].last=a[i].last;
++len;
cut[++t]=i;
}
for(i=t;i>=1;--i)
{
writeT(cut[i]);
putchar(' ');
}
putchar('\n');
}
return 0;
}