#include <bits/stdc++.h>
using namespace std;
const int max_n = 1000;
bool G[max_n][max_n];
vector<int> bit;
void edge(int u, int v) { G[u][v] = G[v][u] = true; }
int main() {
  int k;
  cin >> k;
  for (; k > 0; k = k >> 1) bit.push_back(k & 1);
  const int lg = bit.size() - 1;
  memset(G, 0, sizeof G);
  if (bit[0]) edge(2, 0);
  int n = 3;
  for (int i = 1; i <= lg; i++) {
    edge(n - 1, n);
    n++;
  }
  edge(n - 1, 1);
  for (int i = 1; i <= lg; i++)
    if (bit[i])
      for (int j = 1; j <= i; j++) {
        if (j == 1)
          edge(n, 0), edge(n + 1, 0);
        else {
          edge(n, n - 1), edge(n + 1, n - 1);
          edge(n, n - 2), edge(n + 1, n - 2);
        }
        if (i == j) edge(n, i + 2), edge(n + 1, i + 2);
        n += 2;
      }
  cout << n << endl;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) cout << (G[i][j] ? 'Y' : 'N');
    cout << endl;
  }
  return 0;
}
