#include <bits/stdc++.h>
using namespace std;
int n,i,a[200002],t,d,st;
struct piece
{
int start,end,next,left,zhi;
}q[200001];
bool used[200002];
int main()
{
cin>>n;
for(i=1; i<=n; i++) cin>>a[i],cout<<i<<endl;
a[n+1]=1^a[n];
t=1;
q[1].start=1;
q[1].zhi=a[1];
for(i=2; i<=n+1; i++)
if(a[i]!=a[i-1])
{
q[t].end=i-1;
t++;
q[t].start=i;
q[t].zhi=a[i];
}
t--;
for(i=1; i<=t; i++) q[i].left=i-1;
q[t].next=-1;
for(i=0; i<t; i++) q[i].next=i+1;
while(d<n)
{
i=0;
bool f=0;
do
{
i=q[i].next;
if(q[i].start<=n)
{
cout<<q[i].start<<" ";
used[q[i].start]=1;
d++;
q[i].start++;
}
if(q[i].start>q[i].end && q[i].next!=-1)
{
q[q[i].next].left=q[i].left;
q[q[i].left].next=q[i].next;
f=1;
}
if(q[i].start>q[i].end && q[i].next==-1) q[q[i].left].next=-1;
while(used[q[i].start] && q[i].start<q[i].end) q[i].start++;
}while(q[i].next!=-1);
cout<<endl;
if(f)
{
i=0;
if(q[0].next==-1) break;
do
{
i=q[i].next;
if(q[i].next==-1) break;
while(q[q[i].next].zhi==q[i].zhi)
{
q[q[q[i].next].next].left=i;
q[i].end=q[q[i].next].end;
q[i].next=q[q[i].next].next;
}
}while(q[i].next!=-1);
}
}
}