from pathlib import Path

TEMPLATE = [
    "..+-+",
    "./ /|",
    "+-+ +",
    "| |/.",
    "+-+..",
]

def render_art(a):
    n = len(a)
    m = len(a[0]) if n else 0
    H = max((max(row) for row in a), default=0)
    if H == 0:
        return ""
    h = 2 * (H + n - 1) + 3
    w = 2 * (m + n - 1) + 3
    canvas = [['.'] * w for _ in range(h)]
    for i in range(n):          # back -> front
        for j in range(m):      # left -> right
            for k in range(1, a[i][j] + 1):   # bottom -> top
                y = 2 * (H - k + i)
                x = 2 * (j + (n - 1 - i))
                for dy, row in enumerate(TEMPLATE):
                    for dx, ch in enumerate(row):
                        if ch != '.':
                            canvas[y + dy][x + dx] = ch
    lines = []
    for row in canvas:
        s = ''.join(' ' if ch == '.' else ch for ch in row).rstrip()
        lines.append(s)
    while lines and lines[-1] == "":
        lines.pop()
    return '\n'.join(lines)

def build_cases():
    cases = {}

    cases[1] = [[1]]

    cases[2] = [[50]]

    row3 = []
    for j in range(50):
        if j in {0, 7, 13, 20, 28, 37, 49}:
            row3.append(0)
        else:
            row3.append(((j*j + 3*j + 5) % 37) + 1)
    cases[3] = [row3]

    cases[4] = []
    for i in range(50):
        if i in {5, 11, 18, 26, 35, 44}:
            cases[4].append([0])
        else:
            cases[4].append([((3*i*i + 7*i + 11) % 41) + 1])

    cases[5] = [
        [1, 2, 3],
        [2, 3, 1],
        [3, 0, 2],
    ]

    cases[6] = [[6] * 12 for _ in range(12)]

    a7 = []
    for i in range(7):
        row = []
        for j in range(9):
            v = max(0, 8 - abs(i - 3) - abs(j - 4))
            if (i + j) % 4 == 0:
                v = max(0, v - 2)
            if (i, j) in {(1, 4), (3, 2), (5, 6)}:
                v = 0
            row.append(v)
        a7.append(row)
    cases[7] = a7

    cases[8] = [[i + j + 1 for j in range(10)] for i in range(10)]

    a9 = []
    for i in range(20):
        row = []
        for j in range(25):
            v = (17 * i + 23 * j + 7 * i * j + 13) % 31
            if (i + j) % 6 == 0:
                v = 0
            if i == 19 or j == 24:
                v = max(v, 28)
            row.append(v)
        a9.append(row)
    cases[9] = a9

    a10 = []
    for i in range(50):
        row = []
        for j in range(50):
            v = (37 * i + 19 * j + 11 * i * j + 7) % 51
            if (i + 2 * j) % 11 == 0:
                v = 0
            row.append(v)
        a10.append(row)
    a10[0][1] = 50
    a10[49][49] = 50
    cases[10] = a10

    return cases

def main():
    root = Path(__file__).resolve().parent
    cases = build_cases()
    for idx in range(1, 11):
        a = cases[idx]
        n = len(a)
        m = len(a[0])
        (root / f"{idx}.in").write_text(
            f"{n} {m}\n" + '\n'.join(' '.join(map(str, row)) for row in a) + '\n',
            encoding='utf-8'
        )
        (root / f"{idx}.ans").write_text(render_art(a) + '\n', encoding='utf-8')

if __name__ == "__main__":
    main()
