#include <iostream>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <vector>
#include <deque>
#include <bitset>
#include <list>
using namespace std;
#define pp pair<long long,long long>
#define f first
#define s second
#define ppp pair<pair<long long,long long>,long long>
#define pppp pair<pair<long long,long long>,pair<long long,long long> >
#define pb push_back
#define ll long long
ll arr[550];
ll mat[550][550];
set<pp> st;
int main() {
	ll t,n,i,j,k,l;
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	t=1;
	// cin>>t;
	while (t--) {
		cin>>n;
		for (i=1;i<=n;i++) {
			cin>>arr[i];
		}
		for (i=1;i<=n;i++) {
			for (j=1;j<=i;j++) {
				mat[i][j]=-1;
			}
		}
		bool flag=true;
		for (i=1;i<=n;i++) {
			st.clear();
			st.insert({i,i});
			ll cnt=0;
			while (cnt<arr[i] && !st.empty()) {
				pp x=*(st.begin());
				st.erase(st.begin());
				mat[x.s][x.f]=arr[i];
				cnt++;
				if (x.f>1 && mat[x.s][x.f-1]==-1) {
					st.insert({x.f-1,x.s});
				}
				if (x.s<n && mat[x.s+1][x.f]==-1) {
					st.insert({x.f,x.s+1});
				}
			}
			if (cnt<arr[i]) {
				flag=false;
				break;
			}
		}
		if (!flag) {
			cout<<-1<<'\n';
			continue;
		}
		for (i=1;i<=n;i++) {
			for (j=1;j<=i;j++) {
				cout<<mat[i][j]<<' ';
			}
			cout<<'\n';
		}
		
	}

	return 0;
}