#include <bits/stdc++.h>
using namespace std;
const int N = 2005;
bitset<N> a[N];
int deg[N];
int degcnt[N];
int n;
void inc(int i) {
  degcnt[deg[i]]--;
  deg[i]++;
  degcnt[deg[i]]++;
}
void dec(int i) {
  degcnt[deg[i]]--;
  deg[i]--;
  degcnt[deg[i]]++;
}
void flip(int u) {
  for (int i = 0; i < n; i++) {
    if (i == u) continue;
    a[i][u] = !a[i][u];
    a[u][i] = !a[u][i];
    if (a[i][u])
      inc(i), dec(u);
    else
      dec(i), inc(u);
  }
}
bool check() {
  vector<int> d;
  d.reserve(n);
  for (int i = n - 1; i >= 0; i--) {
    for (int j = 0; j < degcnt[i]; j++) d.push_back(i);
  }
  long long sum = 0;
  for (int i = 1; i < n; i++) {
    sum += d[i - 1];
    long long nij = 1LL * i * (i - 1) / 2;
    long long cross = 1LL * i * (n - i);
    if (sum == nij + cross) return false;
  }
  return true;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  degcnt[0] = n;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      char c;
      cin >> c;
      a[i][j] = c - '0';
      if (a[i][j]) inc(i);
    }
  }
  if (n <= 6) {
    int ans = N, cnt = 0;
    for (int mask = 0; mask < (1 << n); mask++) {
      int k = __builtin_popcount(mask);
      if (k > ans) continue;
      for (int i = 0; i < n; i++)
        if (mask & (1 << i)) flip(i);
      bool f = check();
      if (f) {
        if (ans == k)
          cnt++;
        else
          ans = k, cnt = 1;
      }
      for (int i = 0; i < n; i++)
        if (mask & (1 << i)) flip(i);
    }
    if (ans == N)
      cout << -1 << endl;
    else {
      for (int i = 1; i <= ans; i++) cnt *= i;
      cout << ans << " " << cnt << endl;
    }
  } else {
    if (check())
      cout << 0 << " " << 1 << endl;
    else {
      int cnt = 0;
      for (int i = 0; i < n; i++) {
        flip(i);
        if (check()) cnt++;
        flip(i);
      }
      cout << 1 << " " << cnt << endl;
    }
  }
}
