import sys N = 40 def put(a, r, c): if 0 <= r < N and 0 <= c < N and a[r][c] != "P": a[r][c] = "." def connect(a, cells, upper): if not cells: return cells.sort() r, c = cells[0] for nr, nc in cells[1:]: if upper: for x in range(c, nc + 1): put(a, r, x) for y in range(r, nr + 1): put(a, y, nc) else: for y in range(r, nr + 1): put(a, y, c) for x in range(c, nc + 1): put(a, nr, x) r, c = nr, nc if upper: for x in range(c, N): put(a, r, x) for y in range(r, N): put(a, y, N - 1) else: for y in range(r, N): put(a, y, c) for x in range(c, N): put(a, N - 1, x) def build(m): a = [["#"] * N for _ in range(N)] switches, exits = [], [] r = c = 0 vertical = True while True: if vertical: if r + 2 >= N or c + 3 >= N - 1: break for y in range(r, r + 3): for x in range(c, c + 2): a[y][x] = "." switches += [(r, c + 2), (r + 1, c + 2)] exits += [(r, c + 3), (r + 1, c + 3)] r, c = r + 2, c + 1 else: if r + 3 >= N - 1 or c + 2 >= N: break for y in range(r, r + 2): for x in range(c, c + 3): a[y][x] = "." switches += [(r + 2, c), (r + 2, c + 1)] exits += [(r + 3, c), (r + 3, c + 1)] r, c = r + 1, c + 2 vertical = not vertical for r in range(N): for c in range(N): if (r in (N - 3, N - 2) or c in (N - 3, N - 2)) and a[r][c] == ".": a[r][c] = "P" dp = [[0] * N for _ in range(N)] dp[0][0] = 1 for r in range(N): for c in range(N): if (r or c) and a[r][c] == ".": dp[r][c] = (dp[r - 1][c] if r else 0) + (dp[r][c - 1] if c else 0) values = [(dp[r - 1][c] if r else 0) + (dp[r][c - 1] if c else 0) for r, c in switches] chosen = [] for i in sorted(range(len(values)), key=lambda i: values[i], reverse=True): if 0 < values[i] <= m: m -= values[i] chosen.append(i) if m: return None upper, lower = [], [] for i in chosen: r, c = switches[i] a[r][c] = "P" put(a, *exits[i]) (upper if exits[i][0] < exits[i][1] else lower).append(exits[i]) connect(a, upper, True) connect(a, lower, False) a[0][0] = a[-1][-1] = "." return a data = list(map(int, sys.stdin.buffer.read().split())) answer = [] for m in data[1:]: grid = build(m) answer += ["-1"] if grid is None else [str(N)] + ["".join(row) for row in grid] print("\n".join(answer))