#include <bits/stdc++.h>
using namespace std;
char G[1000][1001];
vector<int> adj[1000];
int cnt = 2;
void init(int lg, int c = 0) {
  int l = 0, r = 0;
  for (int i = (1); i <= (lg); i++) {
    adj[l].push_back(cnt);
    adj[l].push_back(cnt + 1);
    if (r) {
      adj[r].push_back(cnt);
      adj[r].push_back(cnt + 1);
    }
    l = cnt;
    r = cnt + 1;
    cnt += 2;
  }
  if (c) {
    adj[l].push_back(cnt);
    adj[r].push_back(cnt + 1);
    l = cnt;
    r = cnt + 1;
    cnt += 2;
  }
  adj[l].push_back(1);
  adj[r].push_back(1);
}
void append(int lg, int L) {
  int l = 2 * lg + 2;
  while (lg < L - 1) {
    adj[l].push_back(cnt);
    l = cnt++;
    lg++;
  }
  adj[l].push_back(1);
}
int main() {
  int k;
  cin >> k;
  if (k == 1) {
    puts("2\nNY\nYN");
    return 0;
  }
  int L;
  for (L = 31; L >= 0; L--)
    if (k & (1 << L)) break;
  init(L);
  for (int lg = L - 1; lg >= 0; lg--)
    if (k & (1 << lg)) {
      if (lg == L - 1)
        init(lg, 1);
      else
        append(lg, L);
    }
  printf("%d\n", cnt);
  for (int i = 0; i < (cnt); i++)
    for (int j = 0; j < (cnt); j++) G[i][j] = 'N';
  for (int u = 0; u < (cnt); u++)
    for (int v : adj[u]) G[u][v] = G[v][u] = 'Y';
  for (int u = 0; u < (cnt); u++) puts(G[u]);
  return 0;
}
