Fox Ciel wants to write a task for a programming contest. The task is: "You are given a simple undirected graph with *n* vertexes. Each its edge has unit length. You should calculate the number of shortest paths between vertex 1 and vertex 2."

Same with some writers, she wants to make an example with some certain output: for example, her birthday or the number of her boyfriend. Can you help her to make a test case with answer equal exactly to *k*?
The first line contains a single integer *k* (1 ≤ *k* ≤ 10<sup class="upper-index">9</sup>).
n = int(input())
bit_len = len(bin(n)[2:])
grpah = []
cnt = 2
for i in range(31):
    if (n >> i)&1:
        pre = [1]
        for _ in range(i):
            for x in pre:
                grpah.append([x,cnt + 1])
                grpah.append([x,cnt + 2])
            pre = [cnt + 1,cnt + 2]
            cnt += 2
        for _ in range(bit_len - i - 1):
            for x in pre:
                grpah.append([x,cnt + 1])
            pre = [cnt + 1]
            cnt += 1
        for x in pre:
            grpah.append([x,2])
ans = [['N']*cnt for _ in range(cnt)]
for x,y in grpah:
    x -= 1
    y -= 1
    ans[x][y] = ans[y][x] = 'Y'
print(cnt)
for i in ans:
    print(''.join(i))