func_code_string: #include <bits/stdc++.h>   int num[10000];   int map[2000][2000];   int add(int a, int b, int c) { map[a][b] = 1, map[b][a] = 1; }   int vis[2000][2];   int main() {     int n;     while (scanf( %d , &n) != EOF) {       memset(map, 0, sizeof(map));       memset(vis, 0, sizeof(vis));       int i, j;       int len = 0;       int ans = 0;       memset(map, 0, sizeof(map));       memset(num, 0, sizeof(num));       for (i = 0; i <= 30; i++) {         if (n & (1 << i)) {           num[i]++;           len = i;         }       }       int index = 3;       for (i = 0; i <= 30; i++) {         if (i != len) continue;         int x, y;         if (i == 0) {           add(1, 2, 1);           index = 3;           continue;         }         for (j = 1; j <= i; j++) {           if (j == 1) {             add(1, index++, 3);             add(1, index++, 4);             x = index - 1;             y = index - 2;           } else {             add(x, index, 5);             index++;             add(y, index, 6);             index++;             add(x, index - 1, 7);             add(y, index - 2, 8);             x = index - 1;             y = index - 2;           }           vis[j][0] = x;           vis[j][1] = y;         }         if (i == len) {           add(x, 2, 1);           add(y, 2, 1);           continue;         }       }       for (i = 0; i <= 30; i++) {         if (num[i] && i != len) {           int x = 1;           for (j = 1; j <= len - i; j++) {             add(x, index++, 1);             x = index - 1;           }           if (i == 0) {             add(x, 2, 1);             continue;           }           add(x, vis[len - i + 1][0], 1);           add(x, vis[len - i + 1][1], 1);         }       }       printf( %d n , index - 1);       for (i = 1; i < index; i++) {         for (j = 1; j < index; j++) {           if (map[i][j] == 1)             printf( Y );           else             printf( N );         }         printf(  n );       }     }     return 0;   }   