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, m = 322, int(input())
p = [['N'] * n for i in range(n)]
def f(i, j): p[i][j] = p[j][i] = 'Y'

k = 6 + 15 * 5
for j in range(k + 1, k + 5): f(k, j)
for i in range(6, k, 5):
    for j in range(i - 4, i): f(i, j)
    for j in range(i + 1, i + 5): f(i, j)
for j in range(k - 4, k): f(k, j)

q, d, s = 4 ** 15, 0, k
while q:
    if m > q:
        t = m // q
        m -= t * q
        if d == 0:
            for j in range(k - t, k): f(0, j)
        else:
            f(0, s)
            for i in range(s, s + d): f(i, i + 1)
            s += d
            for j in range(k - t, k): f(s, j)
    k -= 5
    d += 2
    q //= 4

s += 1
print(n)
for i in range(s): print(''.join(p[i][: s]))