#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
struct node
{
int l, r, num;
}a[N];
struct nodek
{
int l, r, st, en, le;
}b[N];
int main()
{
ios::sync_with_stdio(0);
int n;
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i].num;
int t = 1, cur = 0, start = 1;
a[0].r = 1, b[0].r = 1;
a[1].l = 0, a[1].r = 2;
for(int i = 2; i <= n; i++)
{
a[i].l = i - 1, a[i].r = i + 1;
if(a[i].num == a[i-1].num) t++;
else
{
++cur;
nodek k;
k.l = cur - 1, k.r = cur + 1, k.st = start, k.le = t, k.en = i - 1;
b[cur] = k;
t = 1, start = i;
}
}
++cur;
nodek k;
k.l = cur - 1, k.r = cur + 1, k.st = start, k.le = t, k.en = n;
b[cur] = k;
a[n].r = 0;
b[cur].r = 0;
int c = n;
while(c)
{
for(int i = b[0].r; i; i = b[i].r)
{
// printf("b[%d]:l=%d, r=%d, st=%d, en=%d, le=%d\n", i, b[i].l, b[i].r, b[i].st, b[i].en, b[i].le);
for(int j = b[i].st; j <= b[i].en; j++)
if(a[j].num == a[b[i].st].num)
{
cout << j << ' ';
a[a[j].l].r = a[j].r;
a[a[j].r].l = a[j].l;
b[i].st = j + 1, b[i].le--;
c--;
break;
}
if(b[i].le == 0)
{
if(a[b[b[i].l].st].num == a[b[b[i].r].st].num)
{
b[b[i].l].r = b[b[i].r].r;
b[b[i].l].en = b[b[i].r].en;
b[b[i].l].le += b[b[i].r].le;
}
else
{
b[b[i].l].r = b[i].r;
b[b[i].r].l = b[i].l;
}
}
}
cout << endl;
}
}
10分,#1-#5tle,#6wa,#7ac,#8-#10re......