#include<bits/stdc++.h>

typedef long long ll;
unsigned const int mod= 1e9+7;

using namespace std;

#define FAST ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define int long long 
#define endl "\n"
#define pub push_back
#define ppb pop_back
#define  pii  pair<int, int>
#define  vvi  vector<vector<int>>
#define vi vector<int>
#define vll vector<long long> 
#define max(a, b)  (a>b? a:b)
#define min(a, b)  (a>b? b:a)
#define min3(a,b,c)  ((a>b? b:a)>c? c:(a>b? b:a))
#define max3(a,b,c)   ((a<b? b:a)<c? c:(a<b? b:a))
#define all(x)   x.begin(), x.end()
#define sz  size() 
#define fe first
#define se second
#define inf INT64_MAX
#define minf INT64_MIN


inline ll axlb(int a, int b) {return (b%a==0? (b/a)-1: b/a);} 
inline ll axgeb(int a, int b){return (b%a==0? b/a : (b/a)+1); }
inline ll axgb(int a, int b){ return (b/a)+1;}
inline ll axleb(int a, int b) {return  b/a;}


// print yes or no depending upon a certain condition
inline void printyn(bool c){
 cout<<(c? "YES":"NO")<<endl;
 return;
}


// scan array 
template <typename T>
inline void scanarr(T* arr, int n){
  for(int i=0;i<n; i++){
    cin>>arr[i];
  }
}


// scan vector 
template <typename T>
void scanvec(vector<T>* vec, int n){
    vec->reserve(n+10);
    for(int i=0;i<n; i++){
      T temp;
      cin>>temp;
      vec->pub(temp);
    }
    return ;
}


// print array
template <typename T>
inline void printarr(T* arr, int n){
   for(int i=0;i<n; i++){
     cout<<arr[i]<<" ";
   }
   cout<<endl;
}


// print vector 
template <typename T>
inline void printvec(vector<T>* vec){
    int n= vec->sz;
    for(int i=0;i<n; i++){
      cout<<vec->at(i)<<" ";
    }
    cout<<endl;
}

/*
  this is how to manage double variables 
  always multiply 1.0 with every calculation 
  intialize the variable by double data type 
  // printing -->

  printf("%.15lf\n",ans);   

*/

int arr[500];

void solve(){
 int n;
 cin>>n;
 for(int i=0; i<n; i++){
   cin>>arr[i];
 }
 int ans[n][n];

 for(int i=0; i<n; i++){
   for(int j=0; j<=i; j++){
     if(i==j){
       ans[i][j]= arr[i];
     }
     else{
       ans[i][j]=0;
     }
   }
 }
 for(int i=0; i<n; i++){
     int steps = arr[i]-1;
     int r=i , c=r;
    for(int j=0; j<steps; j++){
      if(c==0){
        ans[++r][c]= arr[i];
      }
      else if(ans[r][c-1]!=0){
        ans[++r][c]= arr[i];
      }

      else{
        ans[r][--c]= arr[i];
      }
    }
     
 }

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


int32_t main(){

  FAST 
 #ifndef ONLINE_JUDGE
 freopen("input.txt", "r", stdin);
 freopen("output.txt", "w", stdout);    
 #endif


 
    solve();
 
  
}    
