def wall(height, width):
count = 0
x, y, angle = 1, 1, True
map = {i: [None for _ in range(width + 2)] for i in range(height + 2)}
while count < height * width:
if 0 < x <= height and 0 < y <= width:
count = count + 1
map[x][y] = count
else:
if angle:
try:
map[x][y + 1]
y = y + 1
except:
x = x + 1
else:
try:
map[x + 1][y]
x = x + 1
except:
y = y + 1
angle = not angle
if angle:
x, y = x - 1, y + 1
else:
x, y = x + 1, y - 1
for v in map.values():
l = ["%0{}d".format(len(str(count))) % i for i in v if i]
if len(l):
print(" ".join(l))
print()
for x in [(3,3),(4,2),(3,5),(1,8)]:
wall(*x)
ZGVmIHdhbGwoaGVpZ2h0LCB3aWR0aCk6CiAgICBjb3VudCA9IDAKICAgIHgsIHksIGFuZ2xlID0gMSwgMSwgVHJ1ZQogICAgbWFwID0ge2k6IFtOb25lIGZvciBfIGluIHJhbmdlKHdpZHRoICsgMildIGZvciBpIGluIHJhbmdlKGhlaWdodCArIDIpfQogICAgd2hpbGUgY291bnQgPCBoZWlnaHQgKiB3aWR0aDoKICAgICAgICBpZiAwIDwgeCA8PSBoZWlnaHQgYW5kIDAgPCB5IDw9IHdpZHRoOgogICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQogICAgICAgICAgICBtYXBbeF1beV0gPSBjb3VudAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGlmIGFuZ2xlOgogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIG1hcFt4XVt5ICsgMV0KICAgICAgICAgICAgICAgICAgICB5ID0geSArIDEKICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICB4ID0geCArIDEKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBtYXBbeCArIDFdW3ldCiAgICAgICAgICAgICAgICAgICAgeCA9IHggKyAxCiAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgeSA9IHkgKyAxCiAgICAgICAgICAgIGFuZ2xlID0gbm90IGFuZ2xlCiAgICAgICAgaWYgYW5nbGU6CiAgICAgICAgICAgIHgsIHkgPSB4IC0gMSwgeSArIDEKICAgICAgICBlbHNlOgogICAgICAgICAgICB4LCB5ID0geCArIDEsIHkgLSAxCgogICAgZm9yIHYgaW4gbWFwLnZhbHVlcygpOgogICAgICAgIGwgPSBbIiUwe31kIi5mb3JtYXQobGVuKHN0cihjb3VudCkpKSAlIGkgZm9yIGkgaW4gdiBpZiBpXQogICAgICAgIGlmIGxlbihsKToKICAgICAgICAgICAgcHJpbnQoIiAiLmpvaW4obCkpCgogICAgcHJpbnQoKQoKCmZvciB4IGluIFsoMywzKSwoNCwyKSwoMyw1KSwoMSw4KV06CiAgICB3YWxsKCp4KQ==