#exec({'RUBY_THREAD_VM_STACK_SIZE'=>'100000000'},'/usr/bin/ruby', $0) if !ENV['RUBY_THREAD_VM_STACK_SIZE']

def inpf() a=gets.chomp.split(" ").map(&:to_f)end

def inps() a=gets.chomp.split(" ")end

def copy(a) Marshal.load(Marshal.dump(a)) end

def kaijo(n,r = 10**9+7)(n < 2)? 1 : (2..n).inject{|memo,u|memo=(memo*u)%r} end

def na(n,d=0) Array.new(n,d)end

def na2(n,m,d=0) Array.new(n){Array.new(m,d)}end

def na3(n,m,l,d=0) Array.new(n){Array.new(m){Array.new(l,d)}}end

def inp() a=gets.chomp.split(" ").map(&:to_i)end

def r_up(a, b) (a+b-1)/b end

def sum(a) a.inject(:+) end

n = inp[0]
ct = na(n,0)
mt = na(n,0)
ans = na2(n,n,false)
c = 0
turn = 1
ct[0] = n
while mt.uniq.size!=n
  cc = 0
  now = 0
  pls = 0
  ctn = na(n,0)
  n.times do |i|
    pls += 1 if(cc == r_up(ct[mt[i]],2))
    mt[i] = mt[i]+pls
    ctn[mt[i]] += 1
    cc += 1
    cc = 0 if(cc == ct[mt[i]])
  end
  ct = ctn
  (n).times do |i|
    ((i+1)...n).each do |j|
      if(mt[i]+mt[j]).odd?
        ans[i][j-1] = turn unless(ans[i][j-1])
      end
    end
  end
  turn += 1
end
ans.each.with_index do |a, i|
  puts a[i...(n-1)].join(" ")
end
