func_code_string: #include <bits/stdc++.h>   using namespace std;   const int Max_N = 2e3, Mod = 998244353;   int n, d[Max_N + 5], D[Max_N + 5], opt[Max_N + 5];   char a[Max_N + 5][Max_N + 5];   inline bool Chck() {     sort(D + 1, D + n + 1);     int sum = 0;     for (int i = 1; i < n; i++) {       sum += D[i];       if (sum == i * (i - 1) / 2) return false;     }     return true;   }   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) scanf( %s , a[i] + 1);     for (int i = 1; i <= n; i++)       for (int j = 1; j <= n; j++)         if (a[i][j] ==  1 ) ++d[j];     if (n <= 6) {       int ans = -1, cnt = 0;       for (int s = 0; s < 1 << n; s++) {         for (int i = 1; i <= n; i++) D[i] = d[i], opt[i] = 0;         for (int i = 1; i <= n; i++)           if ((1 << i - 1) & s) opt[i] = 1;         for (int i = 1; i <= n; i++)           for (int j = 1; j <= n; j++)             if (a[i][j] ==  1  && (opt[i] ^ opt[j])) --D[j], ++D[i];         if (Chck()) {           int sum = 0;           for (int i = 1; i <= n; i++)             if ((1 << i - 1) & s) ++sum;           if (sum < ans || ans == -1)             ans = sum, cnt = 1;           else             cnt += sum == ans;         }       }       if (ans == -1)         puts( -1 );       else {         for (int i = 1; i <= ans; i++) cnt = 1ll * cnt * i % Mod;         printf( %d %d n , ans, cnt);       }     } else {       for (int i = 1; i <= n; i++) D[i] = d[i];       if (Chck()) {         puts( 0 1 );         return 0;       }       int ans = 0;       for (int i = 1; i <= n; i++) {         for (int j = 1; j <= n; j++) D[j] = d[j];         for (int j = 1; j <= n; j++)           if (a[i][j] ==  1 )             --D[j], ++D[i];           else if (i != j)             ++D[j], --D[i];         if (Chck()) ++ans;       }       printf( 1 %d n , ans);     }     return 0;   }   