#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
const long long linf = 0x3f3f3f3f3f3f3f3f;
bool mat[1010][1010];
int main() {
  int k;
  scanf("%d", &k);
  k--;
  if (k == 0) {
    return 0 * printf("2\nNY\nYN\n");
  }
  int l = 12, m = 33;
  int gr = 0;
  mat[l - 1][l] = true;
  for (int i = 0; i < 31; i++) {
    if (k & (1 << i)) gr = i;
    mat[l + i][l + i + 1] = true;
  }
  mat[l + m - 1][l + m] = true;
  for (int i = 0; i < gr - 1; i++) {
    mat[l + i + m][l + i + m + 1] = true;
    mat[l + i + m][l + i + 1] = true;
    mat[l + i][l + i + m + 1] = true;
  }
  int n = l + m + gr;
  if (gr > 0) mat[l + m + gr - 1][l + gr] = true, n++;
  mat[n - 1][n] = true;
  for (int i = 0; i < 31; i++) {
    mat[n + i][n + i + 1] = true;
  }
  for (int i = 0; i < gr; i++) {
    if (k & (1 << i)) mat[n + gr - i - 2][l + gr - i - 1] = true;
  }
  mat[1][l - 1] = true;
  mat[1][l + m - 1] = true;
  mat[1][n - 1] = true;
  mat[2][l + m - 2] = true;
  mat[2][n + 31] = true;
  int p = n + 31 + 10;
  printf("%d\n", p);
  for (int i = 1; i <= p; i++) {
    for (int j = 1; j <= p; j++) {
      printf("%c", (mat[i][j] || mat[j][i]) ? 'Y' : 'N');
    }
    printf("\n");
  }
  return 0;
}
