func_code_string: #include <bits/stdc++.h>   using namespace std;   char s[2005];   int n, c[2005][2005], ans = 0x3f3f3f3f, was, ot[2005];   bool chk() {     static int ar[2005];     int sum = 0;     for (int i = (1), LIM = (n); i <= LIM; i++) ar[i] = ot[i], sum += ot[i];     sort(ar + 1, ar + 1 + n);     int sm = 0;     for (int i = (1), LIM = (n - 1); i <= LIM; i++) {       sm += ar[i];       if (sm == i * (i - 1) / 2) return 0;     }     return 1;   }   void dfs(int u, int s) {     if (u == n + 1) {       if (chk()) {         if (ans > s) ans = s, was = 0;         if (ans == s) was++;       }       return;     }     dfs(u + 1, s);     for (int i = (1), LIM = (n); i <= LIM; i++)       if (c[u][i])         ot[u]--, ot[i]++;       else         ot[u]++, ot[i]--;     for (int i = (1), LIM = (n); i <= LIM; i++) swap(c[i][u], c[u][i]);     dfs(u + 1, s + 1);     for (int i = (1), LIM = (n); i <= LIM; i++)       if (c[u][i])         ot[u]--, ot[i]++;       else         ot[u]++, ot[i]--;     for (int i = (1), LIM = (n); i <= LIM; i++) swap(c[i][u], c[u][i]);   }   int main() {     scanf( %d , &n);     for (int i = (1), LIM = (n); i <= LIM; i++) {       scanf( %s , s + 1);       for (int j = (1), LIM = (n); j <= LIM; j++)         c[i][j] = (s[j] ==  1 ), ot[i] += c[i][j];     }     if (n <= 6) {       dfs(1, 0);       if (ans == 0x3f3f3f3f)         puts( -1 );       else {         for (int i = (1), LIM = (ans); i <= LIM; i++)           was = 1ll * was * i % 998244353;         printf( %d %d n , ans, was);       }       return 0;     } else {       if (chk()) {         puts( 0 1 );         return 0;       }       for (int u = (1), LIM = (n); u <= LIM; u++) {         for (int i = (1), LIM = (n); i <= LIM; i++)           if (c[u][i])             ot[u]--, ot[i]++;           else             ot[u]++, ot[i]--;         for (int i = (1), LIM = (n); i <= LIM; i++) swap(c[i][u], c[u][i]);         if (chk()) was++;         for (int i = (1), LIM = (n); i <= LIM; i++)           if (c[u][i])             ot[u]--, ot[i]++;           else             ot[u]++, ot[i]--;         for (int i = (1), LIM = (n); i <= LIM; i++) swap(c[i][u], c[u][i]);       }       printf( %d %d n , 1, was);     }   }   