def s(n, o=1):
  p = [(1 if i % 2 == 0 else n)*((-1)**((i//2) % 2)) for i in range(2*n-1) for j in range(n-(i+1)//2)]
  q = [sum(p[:i+1]) for i in range(n*n)][::o]
  r = sorted([i+1 for i in range(n*n)], key=lambda x: q[x-1])
  return [r[n*i:n*(i+1)] for i in range(n)]

n = 4
p = len(str(n*n))

m = s(n)
print('\n'.join(' '.join(str(y).rjust(p) for y in x) for x in m))

print('-'*(p+1)*n)

m = s(n, -1)
print('\n'.join(' '.join(str(y).rjust(p) for y in x) for x in m))