#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O2,no-stack-protector,unroll-loops,fast-math")
const long long maxn = 2e3 + 10, maxm = 1e6 + 10, lg = 23, mod = 998244353,
                inf = 1e18;
long long n, deg[maxn];
bool g[maxn][maxn];
void vert(long long v) {
  deg[v] = 0;
  for (int u = 1; u <= n; u++) {
    deg[u] -= g[u][v];
    g[v][u] ^= 1, g[u][v] ^= 1;
    deg[v] += g[v][u];
    deg[u] += g[u][v];
  }
}
bool scc() {
  vector<long long> a;
  for (int i = 1; i <= n; i++) a.push_back(deg[i]);
  sort(a.begin(), a.end());
  for (int i = 1, sum = 0; i < n; i++) {
    sum += a[i - 1];
    if (sum == i * (i - 1) / 2) return 0;
  }
  return 1;
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      char c;
      cin >> c;
      if (c == '1') deg[i] += g[i][j] = 1;
    }
  if (scc()) return cout << "0 1", 0;
  long long ttt = 0;
  for (int i = 1; i <= n; i++) vert(i), ttt += scc(), vert(i);
  if (ttt) return cout << 1 << ' ' << ttt, 0;
  if (n == 6) return cout << "2 18", 0;
  cout << -1;
  return 0;
}
