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))
ZGVmIHMobiwgbz0xKToKICBwID0gWygxIGlmIGkgJSAyID09IDAgZWxzZSBuKSooKC0xKSoqKChpLy8yKSAlIDIpKSBmb3IgaSBpbiByYW5nZSgyKm4tMSkgZm9yIGogaW4gcmFuZ2Uobi0oaSsxKS8vMildCiAgcSA9IFtzdW0ocFs6aSsxXSkgZm9yIGkgaW4gcmFuZ2UobipuKV1bOjpvXQogIHIgPSBzb3J0ZWQoW2krMSBmb3IgaSBpbiByYW5nZShuKm4pXSwga2V5PWxhbWJkYSB4OiBxW3gtMV0pCiAgcmV0dXJuIFtyW24qaTpuKihpKzEpXSBmb3IgaSBpbiByYW5nZShuKV0KCm4gPSA0CnAgPSBsZW4oc3RyKG4qbikpCgptID0gcyhuKQpwcmludCgnXG4nLmpvaW4oJyAnLmpvaW4oc3RyKHkpLnJqdXN0KHApIGZvciB5IGluIHgpIGZvciB4IGluIG0pKQoKcHJpbnQoJy0nKihwKzEpKm4pCgptID0gcyhuLCAtMSkKcHJpbnQoJ1xuJy5qb2luKCcgJy5qb2luKHN0cih5KS5yanVzdChwKSBmb3IgeSBpbiB4KSBmb3IgeCBpbiBtKSk=