#include <bits/stdc++.h>
using namespace std;
int ch[1005][1005];
int top = 2;
int buildroad(int x, int lev) {
  for (int i = 1; i <= 4; i++) top++, ch[1][top] = ch[top][1] = 1;
  for (int k = 1; k <= x; k++) {
    for (int i = 1; i <= 4; i++)
      for (int j = 1; j <= 4; j++)
        ch[top - i + 1][top + j] = ch[top + j][top - i + 1] = i;
    top += 4;
  }
  for (int k = x + 1; k <= lev; k++) {
    for (int i = 1; i <= 4; i++)
      ch[top - i + 1][top + i] = ch[top + i][top - i + 1] = 1;
    top += 4;
  }
  return top;
}
int main() {
  int k;
  scanf("%d", &k);
  const int lev = (31 - __builtin_clz(k)) / 2;
  for (int i = 0; k; i++, k >>= 2) {
    if (k & 3) {
      int x = buildroad(i, lev);
      if (k & 1) ch[x][2] = ch[2][x] = 1;
      if (k & 2) ch[x - 1][2] = ch[2][x - 1] = ch[x - 2][2] = ch[2][x - 2] = 1;
    }
  }
  printf("%d\n", top);
  for (int i = 1; i <= top; i++) {
    for (int j = 1; j <= top; j++) putchar(ch[i][j] ? 'Y' : 'N');
    putchar('\n');
  }
}
