#include <bits/stdc++.h>
const long long MOD = 1e9 + 7;
using pii = std::pair<long long, long long>;
using namespace std;
long long k;
long long exists[1005][1005] = {0};
class BFoxAndMinimalPath {
 public:
  void solve(std::istream& in, std::ostream& out) {
    in >> k;
    long long cur = 3, length = 63 - __builtin_clzll(k);
    for (long long i = (0); i < (length); i++) {
      exists[cur + 3 * i][cur + 3 * i + 1] = 1;
      exists[cur + 3 * i][cur + 3 * i + 2] = 1;
      exists[cur + 3 * (i + 1)][cur + 3 * i + 1] = 1;
      exists[cur + 3 * (i + 1)][cur + 3 * i + 2] = 1;
    }
    exists[2][3 * (length + 1)] = 1;
    cur = 3 * (length + 1) + 1;
    for (long long i = (0); i < (length + 1); i++)
      if (k & (1 << i)) {
        exists[1][cur] = 1;
        for (long long j = (0); j < (2 * (length - i)); j++)
          exists[cur + j][cur + j + 1] = 1;
        exists[cur + 2 * (length - i)][3 + 3 * (length - i)] = 1;
        cur += (2 * (length - i) + 1);
      }
    out << cur - 1 << "\n";
    for (long long i = (1); i < (cur); i++) {
      for (long long j = (1); j < (cur); j++)
        out << "NY"[exists[i][j] || exists[j][i]];
      out << "\n";
    }
  }
};
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  BFoxAndMinimalPath solver;
  std::istream& in(std::cin);
  std::ostream& out(std::cout);
  solver.solve(in, out);
  return 0;
}
