#include <bits/stdc++.h>

#define lo(i, n, m) for (int i = n; i < m; i++)
#define loe(i, n, m) for (int i = n; i <= m; i++)
#define rlo(i, n, m) for (int i = n - 1; i >= m; i--)
#define rloe(i, n, m) for (int i = n; i >= m; i--)
#define pb push_back
#define mk make_pair
#define scd(x) scanf("%d", &x)
#define scs(x) scanf("%s", x)
#define sclf(x) scanf("%lf", &x)
#define scll(x) scanf("%lld", &x)
#define clr(a, b) memset((a), (b), sizeof(a))
#define fi first
#define se second
typedef long long ll;
using namespace std;
// const int INF = 0x3f3f3f3f;
// const int INF = 0x7fffffff;
// const LL INF = 0x3f3f3f3f3f3f3f3f;
// const LL INF = 0x7fffffffffffffff;
const int NIL = -1;
template <class T>
inline T mx(T a, T b) {return a > b ? a : b;}
template <class T>
inline T mi(T a, T b) {return a < b ? a : b;}
template <class T>
inline void sw(T &a, T &b) {
    T t = a; a = b; b = t;
}
template <class T>
inline T mabs(T x) {return x < 0 ? -x : x;}
inline char gc() {
    char ret;
    while ((ret = getchar()) == ' ' || ret == '\n' || ret == '\t');
    return ret;
}
template <class T>
inline T sq(T x) {return x * x;}

const int lim = 550;
int buf[lim][lim];
int n;
int dat[lim];
void ezsolve(int lv, int len) {
    loe(i, 2, len) buf[lv + 1][i - 1] = buf[lv][i];
}
void solve(int lv) {
    if (lv > n) return;
    int len = n - lv + 1;
    if (buf[lv][1] == lv) {
        ezsolve(lv, len);
    } else if (buf[lv][len] == lv) {
        reverse(buf[lv] + 1, buf[lv] + len + 1);
        ezsolve(lv, len);
        reverse(buf[lv] + 1, buf[lv] + len + 1);
        reverse(buf[lv + 1] + 1, buf[lv + 1] + len);
    } else {
        int pos = 0;
        loe(i, 1, len) if (buf[lv][i] == lv) {pos = i; break;}
        lo(i, 1, pos) buf[lv + 1][i] = buf[lv][i];
        loe(i, pos + 1, len) buf[lv + 1][i - 1] = buf[lv][i];
    }
    solve(lv + 1);
}
int main() {
    // ios::sync_with_stdio(false);
    // cin.tie(NULL), cout.tie(NULL);
    scd(n);
    loe(i, 1, n) scd(dat[i]);
    loe(j, 1, n) buf[1][j] = dat[j];
    solve(1);
    loe(i, 1, n) {
        int len = i;
        int r = i, c = 1;
        bool flag = false;
        while (len--) {
            if (flag) putchar(' ');
            flag = true;
            printf("%d", buf[r][c]);
            --r, ++c;
        }
        putchar('\n');
    }
    return 0;
}
