func_code_string: #include <bits/stdc++.h>   #pragma comment(linker,  /STACK:102400000,102400000 )   using namespace std;   int bit[1100];   int tot = 0;   void GetBinary(int n) {     memset(bit, 0, sizeof bit);     while (n) {       bit[tot++] = n & 1;       n >>= 1;     }   }   int layer[1100][2];   void Construct() {     layer[1][0] = 1;     layer[2][0] = 3;     layer[3][0] = 4;     layer[3][1] = 5;     for (int i = 4; i <= 60; i += 2) {       layer[i][0] = layer[i - 2][0] + 3;       layer[i + 1][0] = layer[i - 1][0] + 3;       layer[i + 1][1] = layer[i - 1][1] + 3;     }   }   int g[1100][1100];   int main() {     ios::sync_with_stdio(false);     int n;     cin >> n;     GetBinary(n);     Construct();     memset(g, 0, sizeof g);     int total = tot << 1;     layer[total + 1][0] = 2;     for (int i = 2; i <= total; ++i) {       if (i == 2) {         g[layer[i - 1][0]][layer[i][0]] = 1;         continue;       }       if (i % 2 == 1) {         g[layer[i - 1][0]][layer[i][0]] = 1;         g[layer[i - 1][0]][layer[i][1]] = 1;       } else {         g[layer[i - 1][0]][layer[i][0]] = 1;         g[layer[i - 1][1]][layer[i][0]] = 1;       }     }     g[2][layer[total][0]] = 1;     int PathLength = total;     int ind = tot * 3, indd = tot * 3, end = tot * 3;     for (int i = 0; i < tot - 1; ++i) {       if (bit[i]) {         int pre = layer[(i + 1) * 2][0];         indd = ind;         for (int j = 1; j <= PathLength - (i + 1) * 2 - 1; ++j) {           g[pre][j + indd] = 1;           pre = j + indd;           ind++;         }         g[pre][end] = 1;       }     }     cout << ind << endl;     for (int i = 1; i <= ind; ++i) {       for (int j = 1; j <= ind; ++j) {         if (i == j)           cout <<  N ;         else if (g[i][j] || g[j][i])           cout <<  Y ;         else           cout <<  N ;       }       cout << endl;     }     return 0;   }   