#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5, H = 0, T = 1e5 + 1;
struct Node {
int f, l, r, len, nxt, pre;
};
int n, m;
int s[N], x[N];
Node f[N];
void Print(){
for(int i = f[H].nxt; i != T; i = f[i].nxt){
cout << f[i].f << ' ' << f[i].l << ' ' << f[i].len << '\n';
}
}
int main(){
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n;
x[0] = -1;
for(int i = 1; i <= n; i++){
cin >> x[i];
s[i - 1] = i;
if(x[i] != x[i - 1]){
f[++m] = {x[i], i};
f[m - 1].nxt = m, f[m].pre = m - 1;
}
f[m].len = i - f[m].l + 1, f[m].r = i;
}
f[m].nxt = T;
f[T].pre = m;
while(m){
for(int i = f[H].nxt; i != T; i = f[i].nxt){
cout << f[i].l << ' ';
f[i].l = s[f[i].l], f[i].len--;
if(!f[i].len){
f[f[i].pre].nxt = f[i].nxt;
f[f[i].nxt].pre = f[i].pre;
m--;
}
}
cout << '\n';
for(int i = f[T].pre; f[i].pre != H; i = f[i].pre){
if(f[i].f == f[f[i].pre].f){
f[f[i].pre].len += f[i].len;
s[f[f[i].pre].r] = f[i].l;
f[f[i].pre].r = f[i].r;
f[f[i].pre].nxt = f[i].nxt;
f[f[i].nxt].pre = f[i].pre;
m--;
}
}
}
return 0;
}