#include <bits/stdc++.h>
using namespace std;
const int N = 2000;
bool mat[N][N];
int deg[N], n;
void operate(int v) {
  for (int i = 0; i < n; i++) {
    deg[v] -= mat[v][i];
    deg[i] -= mat[i][v];
    mat[v][i] ^= 1;
    mat[i][v] ^= 1;
    deg[v] += mat[v][i];
    deg[i] += mat[i][v];
  }
}
bool check() {
  vector<int> vec(deg, deg + n);
  sort(vec.rbegin(), vec.rend());
  long long sm = 0;
  for (int i = 0; i < n - 1; i++) {
    sm += vec[i];
    long long bound = 1ll * i * (i + 1) / 2 + 1ll * (i + 1) * (n - i - 1);
    if (sm >= bound) return false;
  }
  return true;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    for (int j = 0; j < n; j++) {
      mat[i][j] = s[j] - '0';
      deg[i] += mat[i][j];
    }
  }
  if (check()) {
    cout << 0 << ' ' << 1 << '\n';
    return 0;
  }
  if (n < 7) {
    vector<int> cnt(n + 1);
    for (int mask = 0; mask < (1 << n); mask++) {
      for (int i = 0; i < n; i++) {
        if (mask >> i & 1) {
          operate(i);
        }
      }
      cnt[__builtin_popcount(mask)] += check();
      for (int i = 0; i < n; i++) {
        if (mask >> i & 1) {
          operate(i);
        }
      }
    }
    for (int i = 0; i <= n; i++) {
      if (cnt[i]) {
        long long res = cnt[i];
        for (int j = 1; j <= i; j++) {
          res *= j;
        }
        cout << i << ' ' << res << '\n';
        return 0;
      }
    }
  } else {
    cout << 1 << ' ';
    int ans = 0;
    for (int i = 0; i < n; i++) {
      operate(i);
      ans += check();
      operate(i);
    }
    cout << ans << '\n';
    return 0;
  }
  cout << -1 << '\n';
  return 0;
}
