#include <bits/stdc++.h>
using namespace std;
using INT = long long;
int edge[2222][2222];
int deg[2222];
int n;
char s[2222];
int id[2222];
int ok() {
  for (int i = 1; i <= n; i++) id[i] = i;
  sort(id + 1, id + n + 1, [&](int u, int v) { return deg[u] < deg[v]; });
  for (int i = 1, sum = 0; i < n; i++) {
    sum += deg[id[i]];
    if (sum == i * (i - 1) / 2) return 0;
  }
  return 1;
}
int small_solve() {
  int mn = n + 1, cnt = 0;
  for (int i = 0; i < (1 << n); i++) {
    for (int j = 0; j < n; j++)
      if ((i >> j) & 1) {
        for (int k = 1; k <= n; k++)
          if (k != j + 1) {
            if (edge[k][j + 1])
              deg[k]--, deg[j + 1]++;
            else
              deg[k]++, deg[j + 1]--;
            edge[k][j + 1] ^= 1;
            edge[j + 1][k] ^= 1;
          }
      }
    if (ok()) {
      if (mn > __builtin_popcount(i))
        mn = __builtin_popcount(i), cnt = 1;
      else if (mn == __builtin_popcount(i))
        cnt++;
    }
    for (int j = 0; j < n; j++)
      if ((i >> j) & 1) {
        for (int k = 1; k <= n; k++)
          if (k != j + 1) {
            if (edge[k][j + 1])
              deg[k]--, deg[j + 1]++;
            else
              deg[k]++, deg[j + 1]--;
            edge[k][j + 1] ^= 1;
            edge[j + 1][k] ^= 1;
          }
      }
  }
  for (int i = 1; i <= mn; i++) cnt *= i;
  if (mn == n + 1)
    cout << -1 << endl;
  else
    cout << mn << ' ' << cnt << endl;
  exit(0);
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    scanf("%s", s + 1);
    for (int j = 1; j <= n; j++)
      if (s[j] == '1') {
        edge[i][j] = 1;
        deg[i]++;
      }
  }
  if (ok()) {
    cout << 0 << ' ' << 1 << endl;
    return 0;
  }
  if (n <= 6) small_solve();
  int cnt = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++)
      if (j != i) {
        if (edge[i][j])
          deg[i]--, deg[j]++;
        else
          deg[i]++, deg[j]--;
      }
    if (ok()) cnt++;
    for (int j = 1; j <= n; j++)
      if (j != i) {
        if (!edge[i][j])
          deg[i]--, deg[j]++;
        else
          deg[i]++, deg[j]--;
      }
  }
  cout << 1 << ' ' << cnt << endl;
  return 0;
}
