#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
string s[2005];
int deg[2005];
int cnt[2005];
bool check(int n) {
  int it = 0, w = 0;
  for (int i = 1; i < n; ++i) {
    while (cnt[it] == 0) ++it;
    w += it - (i - 1);
    --cnt[it];
    if (w == 0) {
      memset(cnt, 0, sizeof cnt);
      return 0;
    }
  }
  while (cnt[it] == 0) ++it;
  --cnt[it];
  return 1;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  int res = 0;
  for (int i = 0; i < n; ++i) {
    cin >> s[i];
    for (int j = 0; j < n; ++j) {
      deg[i] += s[i][j] - '0';
    }
    ++cnt[deg[i]];
  }
  if (check(n)) {
    cout << "0 1";
    return 0;
  }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      if (j != i)
        ++cnt[deg[j] + (s[i][j] == '1' ? 1 : -1)];
      else
        ++cnt[n - 1 - deg[j]];
    }
    res += check(n);
  }
  if (res) {
    cout << "1 " << res;
    return 0;
  }
  int lim = 1 << n;
  for (int t = 2; t <= 6; t++) {
    for (int i = 2; i < lim; ++i) {
      if (__builtin_popcount(i) != t) continue;
      for (int j = 0; j < n; j++) {
        int c = 0;
        for (int l = 0; l < n; l++) {
          c += (s[j][l] - '0') ^ (i >> j & 1 != 0) ^ (i >> l & 1 != 0);
        }
        cnt[c]++;
      }
      res += check(n);
    }
    if (res != 0) {
      for (int i = 2; i <= t; i++) res *= i;
      cout << t << ' ' << res;
      return 0;
    }
  }
  cout << -1;
}
