func_code_string: #include <bits/stdc++.h>   using namespace std;   using INT = long long;   int edge[2222][2222];   int deg[2222];   int n;   char s[2222];   int id[2222];   int ok() {     for (int i = 1; i <= n; i++) id[i] = i;     sort(id + 1, id + n + 1, [&](int u, int v) { return deg[u] < deg[v]; });     for (int i = 1, sum = 0; i < n; i++) {       sum += deg[id[i]];       if (sum == i * (i - 1) / 2) return 0;     }     return 1;   }   int small_solve() {     int mn = n + 1, cnt = 0;     for (int i = 0; i < (1 << n); i++) {       for (int j = 0; j < n; j++)         if ((i >> j) & 1) {           for (int k = 1; k <= n; k++)             if (k != j + 1) {               if (edge[k][j + 1])                 deg[k]--, deg[j + 1]++;               else                 deg[k]++, deg[j + 1]--;               edge[k][j + 1] ^= 1;               edge[j + 1][k] ^= 1;             }         }       if (ok()) {         if (mn > __builtin_popcount(i))           mn = __builtin_popcount(i), cnt = 1;         else if (mn == __builtin_popcount(i))           cnt++;       }       for (int j = 0; j < n; j++)         if ((i >> j) & 1) {           for (int k = 1; k <= n; k++)             if (k != j + 1) {               if (edge[k][j + 1])                 deg[k]--, deg[j + 1]++;               else                 deg[k]++, deg[j + 1]--;               edge[k][j + 1] ^= 1;               edge[j + 1][k] ^= 1;             }         }     }     for (int i = 1; i <= mn; i++) cnt *= i;     if (mn == n + 1)       cout << -1 << endl;     else       cout << mn <<     << cnt << endl;     exit(0);   }   int main() {     cin >> n;     for (int i = 1; i <= n; i++) {       scanf( %s , s + 1);       for (int j = 1; j <= n; j++)         if (s[j] ==  1 ) {           edge[i][j] = 1;           deg[i]++;         }     }     if (ok()) {       cout << 0 <<     << 1 << endl;       return 0;     }     if (n <= 6) small_solve();     int cnt = 0;     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= n; j++)         if (j != i) {           if (edge[i][j])             deg[i]--, deg[j]++;           else             deg[i]++, deg[j]--;         }       if (ok()) cnt++;       for (int j = 1; j <= n; j++)         if (j != i) {           if (!edge[i][j])             deg[i]--, deg[j]++;           else             deg[i]++, deg[j]--;         }     }     cout << 1 <<     << cnt << endl;     return 0;   }   