#include<bits/stdc++.h>
using namespace std;
const int maxn = 200005;
struct node{
int sze=0,val,lft;
};
queue<pair<int,pair<int,int> > > q;
node sv[maxn];
int cnt=0,flag=1;
int a[maxn];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=maxn;i++)
a[i]=-1;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int cnt=0,sze=0,l;
for(int i=1;i<=n;i++){
if(flag==1){
l=i;
flag=0;
}
if(a[i]!=a[i+1])
{
sze++;
q.push(make_pair(sze,make_pair(a[i],l)));
sze=0;
flag=1;
}
else sze++;
}
node sc;
while(n){
cnt=0;
while(!q.empty()){
sc.sze=q.front().first;
sc.val=q.front().second.first;
sc.lft=q.front().second.second;
printf("%d ",sc.lft);
q.pop();
if(sc.sze<=1) n--;
else{
n--;
sv[++cnt].sze=sc.sze-1;
sv[cnt].val=sc.val;
sv[cnt].lft=sc.lft+1;
}
}
cout<<endl;
for(int i=1;i<cnt;i++)
{
if(sv[i].val==sv[i+1].val){
sv[i+1].sze+=sv[i].sze;
sv[i].sze=0;
sv[i+1].lft=sv[i].lft;
}
}
for(int i=1;i<=cnt;i++)
{
if(sv[i].sze!=0) q.push(make_pair(sv[i].sze,make_pair(sv[i].val,sv[i].lft)));
}
}
}