#include <bits/stdc++.h>
using namespace std;
int read() {
  int x = 0;
  bool flg = false;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') flg = true;
  for (; isdigit(ch); ch = getchar()) x = (x << 3) + (x << 1) + (ch ^ 48);
  return flg ? -x : x;
}
const int mod = 998244353;
inline int upd(const int &x) { return x + (x >> 31 & mod); }
inline void add(int &x, const int &y) { x = upd(x + y - mod); }
inline void iadd(int &x, const int &y) { x = upd(x - y); }
int qpow(int x, int y) {
  int res = 1;
  for (; y; y >>= 1, x = 1LL * x * x % mod)
    if (y & 1) res = 1LL * res * x % mod;
  return res;
}
int n;
char mp[2010][2010];
int d[2010];
void rev(int x) {
  d[x] = n - 1 - d[x];
  for (int i(1); i <= (n); i++) {
    if (x == i) continue;
    if (mp[i][x] == '1')
      --d[i];
    else
      ++d[i];
    swap(mp[i][x], mp[x][i]);
  }
}
bool check() {
  static int c[2010];
  memset(c, 0, n + 1 << 2);
  for (int i(1); i <= (n); i++) ++c[d[i]];
  int tot = 0, sum = 0;
  for (int i(0); i <= (n); i++) {
    while (c[i]--) {
      tot++, sum += i;
      if (sum == tot * (tot - 1) / 2) return tot == n;
    }
  }
  assert(0);
  return 0;
}
int fac(int x) {
  int res = 1;
  for (int i(1); i <= (x); i++) res *= i;
  return res;
}
void solve() {
  n = read();
  for (int i(1); i <= (n); i++) scanf("%s", mp[i] + 1);
  for (int i(1); i <= (n); i++)
    for (int j(1); j <= (n); j++) d[i] += mp[i][j] == '1';
  if (n <= 6) {
    int ans = 1e9, anstot = 0;
    for (int i = 0; i < (1 << n); i++) {
      for (int j(1); j <= (n); j++)
        if (i >> j - 1 & 1) rev(j);
      if (check()) {
        int _ans = __builtin_popcount(i);
        if (_ans < ans)
          ans = _ans, anstot = 1;
        else if (_ans == ans)
          anstot++;
      }
      for (int j(1); j <= (n); j++)
        if (i >> j - 1 & 1) rev(j);
    }
    if (ans == 1e9)
      puts("-1");
    else
      printf("%d %d\n", ans, anstot * fac(ans));
    return;
  }
  if (check()) return puts("0 1"), void();
  int tot = 0;
  for (int i(1); i <= (n); i++) {
    rev(i);
    if (check()) tot++;
    rev(i);
  }
  assert(tot);
  printf("1 %d\n", tot);
}
int main() {
  for (int T = 1; T--;) solve();
}
