#include <bits/stdc++.h>
#include <iostream>
using namespace std;
#include<unordered_map>
#include<string>
#include<vector>
#include<algorithm>
#include<math.h>
#include<climits>
#include<sstream>
#include<queue>
#include<stack>
#include<set>
#define ll long long
#define endl '\n'
#define pb push_back
#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL)

ll ans[501][501];
ll visit[501][501];

ll valid_( ll i , ll j , ll count , ll val , ll Y , ll n ){

   if( count == 0 ){
       return 1;
   }

   ll x[4] = {0,1,0,-1};
   ll y[4] = {-1,0,1,0};

   for( ll k=0 ; k<4 ; k++ ){
       ll xn = i+x[k];
       ll yn = j+y[k];

       if( xn >=1 && yn >=1 && xn <= n && yn <= Y && ans[xn][yn] == -1 && visit[xn][yn] == -1 ){
         visit[xn][yn] = 1;
         ans[xn][yn] = val;
         ll v =  valid_(xn,yn,count-1,val , Y , n);
         if( v == 1 ){
           return 1;
         }else{
           return -1;
         }
       }

   }

   return -1;

}

void solve(){

  ll n;
  cin>>n;

  ll p[n+1];
  for( ll i=1 ; i<=n ; i++ ){
    cin>>p[i];
  }

  memset(ans , -1 , sizeof(ans));

  ll valid = 1;

  for( ll i=1 ; i<=n ; i++ ){

    ans[i][i] = p[i];
    memset(visit , -1 , sizeof(visit));

    ll v_ = valid_( i , i , p[i]-1 , p[i] ,  i , n);

    if( v_ == -1 ){
      cout<<-1<<endl;
      return;
    }

  }




    for( int i=1 ; i<=n ; i++ ){
        for( int j=1 ; j<=i ; j++ ){
            cout<<ans[i][j]<<" ";
        }
        cout<<endl;
    }













}


int main(){

 fast_io;
 ll t = 1;
 //cin>>t;

 while( t > 0 ){
    solve();
    t--;
 }

}
