import sys M = int(sys.stdin.readline()) K = 30 # 2^30 > 1e9 N = K + 3 # 33 G = [['#'] * N for _ in range(N)] for k in range(K): # shared binary spine: paths to (k,k) = 2^k for r, c in [(k, k), (k, k + 1), (k + 1, k), (k + 1, k + 1)]: G[r][c] = '.' # collector entry for bit k G[k][k + 3] = '.' # collector staircase: E_k -> E_{k+1} if k + 1 < K: G[k][k + 4] = '.' G[k + 1][k + 4] = '.' # take this bit if (M >> k) & 1: G[k][k + 2] = 'P' # finish from the last collector entry to the goal for r in range(K - 1, N): G[r][N - 1] = '.' print(N) for row in G: print(''.join(row))