#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
const int N = 2e5 + 5;
int n, a[N], num;
int pre[N], nxt[N];
inline int solve() {
int ans = 0;
int head = 2;
for(int i = nxt[0] ; i ; i = nxt[i]) //条件i,编号
{
if(a[i] == head) continue; //一个块内的不输出
printf("%d ", i);
ans ++;
head = a[i];
nxt[ pre[i] ] = nxt[i];
pre[ nxt[i] ] = pre[i];
//int L = pre[i], R = nxt[i];
//nxt[L] = R, pre[R] = L; //每次找到头输出,删除头。
}
printf("\n");
return ans;
}
int main()
{
//freopen("fruit.in", "r", stdin);
//freopen("fruit.out", "w", stdout);
int i;
cin >> n;
a[0] = -1;
for(i = 1 ; i <= n ; i ++) {
scanf("%d", &a[i]);
pre[i] = i - 1;
nxt[i] = i + 1; //双向链表保存位置
}
nxt[0] = 1;
nxt[n] = 0;
while(num < n) num += solve();
return 0;
}