#include <bits/stdc++.h>
     
#define all(A) begin(A), end(A)
#define rall(A) rbegin(A), rend(A)
#define sz(A) int(A.size())
#define pb push_back
#define mp make_pair
     
using namespace std;
     
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef vector <int> vi;
typedef vector <ll> vll;
typedef vector <pii> vpii;
typedef vector <pll> vpll;

void solve (vi p, vector <vi>& ans) {
  int n = sz(p);
  for (int i = n - 1; i >= 0; i--) {
    int x = p[i];
    int cnt = x;
    int r = i;
    int c = i;
    for (int j = 0; j < cnt; j++) {
      assert(0 <= r and r < n and 0 <= c and c <= r);
      ans[r][c] = x;
      if (r + 1 < n and c <= r + 1 and ans[r + 1][c] == -1) {
        r += 1;
      } else {
        c -= 1;
      }
    }
  }
};

void test (int n) {
  vi p(n);
  iota(all(p), 1);
  do {
    vector <vi> ans(n);
    for (int i = 0; i < n; i++) ans[i].resize(i + 1, -1);
    solve(p, ans);
    for (auto row: ans) {
      for (auto cell: row) {
        assert(cell != -1);
      }
    }
  } while (next_permutation(all(p)));
};

int main () {
  ios::sync_with_stdio(false); cin.tie(0);
  /*
  test(8);
  test(9);
  test(10);
  return 0;
  */
  int n;
  cin >> n;
  vi p(n);
  for (int i = 0; i < n; i++) cin >> p[i];
  vector <vi> ans(n);
  for (int i = 0; i < n; i++) ans[i].resize(i + 1, -1);
  solve(p, ans);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= i; j++) {
      cout << ans[i][j] << " \n"[j == i];
    }
  }
  return (0);
}
