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>).
k = int(input())


edges = [['N' for i in range(1010)] for j in range(1010)]
vertices = 2

def add_edge(a, b):
    global edges
    edges[a][b] = edges[b][a] = 'Y'


for i in range(1, 29 + 1):
    vertices += 3
    add_edge(i * 3, i * 3 - 1)
    add_edge(i * 3, i * 3 + 2)
    add_edge(i * 3 + 1, i * 3 - 1)
    add_edge(i * 3 + 1, i * 3 + 2)


for bit in range(30):
    if (1 << bit) & k:
        lst = 1
        for i in range((29 - bit) * 2):
            vertices += 1
            add_edge(lst, vertices)
            lst = vertices
        add_edge(lst, 3 * bit + 2)

print(vertices)
print('\n'.join(map(lambda x: ''.join(x), edges[1:])))
