#include <bits/stdc++.h>   using std::cerr;   using std::endl;   const int N = 2005, INF = 1e9, P = 998244353;   int n, G[N][N];   char str[N];   int deg[N];   inline int binom(int x) { return x * (x - 1) / 2; }   inline bool check() {     std::sort(deg + 1, deg + n + 1);     int sum = 0;     for (int i = 1; i < n; ++i) {       sum += deg[i];       if (sum == binom(i)) return 0;     }     return 1;   }   namespace SOL1 {   inline bool Check(int s) {     for (int i = 1; i <= n; ++i) deg[i] = 0;     for (int i = 1; i <= n; ++i)       for (int j = 1; j <= n; ++j) {         int cnt = ((s >> (i - 1)) & 1) + ((s >> (j - 1)) & 1);         if (cnt == 1) {           if (G[i][j]) ++deg[i];         } else {           if (G[j][i]) ++deg[i];         }       }     return check();   }   inline void solve() {     int min = INF, cnt = 0;     for (int s = 0; s < 1 << n; ++s) {       if (__builtin_popcount(s) > min) continue;       if (Check(s)) {         if (__builtin_popcount(s) < min) min = __builtin_popcount(s), cnt = 0;         if (__builtin_popcount(s) == min) {           ++cnt;         }       }     }     if (min == INF)       puts( -1 );     else {       for (int i = 1; i <= min; ++i) cnt = 1ll * cnt * i % P;       printf( %d %d n , min, cnt);     }   }   }  // namespace SOL1   namespace SOL2 {   int buc[N];   inline void solve() {     for (int i = 1; i <= n; ++i)       for (int j = 1; j <= n; ++j)         if (G[j][i]) ++deg[i], ++buc[i];     if (check()) {       std::cout << 0 <<     << 1 << std::endl;       return;     }     int cnt = 0;     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= n; ++j) deg[j] = buc[j];       for (int j = 1; j <= n; ++j) {         if (G[j][i]) --deg[i], ++deg[j];         if (G[i][j]) ++deg[i], --deg[j];       }       cnt += check();     }     std::cout << 1 <<     << cnt << std::endl;   }   }  // namespace SOL2   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; ++i) {       scanf( %s , str + 1);       for (int j = 1; j <= n; ++j) G[i][j] = str[j] -  0 ;     }     if (n <= 6)       SOL1::solve();     else       SOL2::solve();     return 0;   }   