#include <bits/stdc++.h>
using namespace std;
const int maxn = 2222, mod = 998244353;
inline long long read() {
  char ch = getchar();
  long long x = 0, f = 0;
  while (ch < '0' || ch > '9') f |= ch == '-', ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return f ? -x : x;
}
int n, deg[maxn], tmp[maxn];
char e[maxn][maxn];
bool check() {
  for (int i = (1); i <= (n); i++) tmp[i] = deg[i];
  sort(tmp + 1, tmp + n + 1);
  int sum = 0;
  for (int i = (1); i <= (n - 1); i++) {
    sum += tmp[i];
    if (sum == i * (i - 1) / 2) return false;
  }
  return true;
}
void work(int i) {
  for (int j = (1); j <= (n); j++) {
    if (e[i][j] == '1')
      deg[i]--, deg[j]++;
    else
      deg[j]--, deg[i]++;
    e[i][j] ^= 1;
    e[j][i] ^= 1;
  }
}
int main() {
  n = read();
  for (int i = (1); i <= (n); i++) {
    scanf("%s", e[i] + 1);
    for (int j = (1); j <= (n); j++)
      if (e[i][j] == '1') deg[i]++;
  }
  if (check()) return puts("0 1"), 0;
  if (n > 6) {
    int ans = 0;
    for (int i = (1); i <= (n); i++) {
      work(i);
      if (check()) ans++;
      work(i);
    }
    printf("1 %d\n", ans);
    return 0;
  }
  int ans1 = 1e9, ans2 = 0;
  for (int i = (0); i <= ((1 << n) - 1); i++) {
    int cnt = 0;
    for (int j = (1); j <= (n); j++)
      if ((i >> (j - 1)) & 1) cnt++, work(j);
    if (check()) {
      if (cnt < ans1) ans1 = cnt, ans2 = 0;
      if (cnt == ans1) ans2++;
    }
    for (int j = (n); j >= (1); j--)
      if ((i >> (j - 1)) & 1) work(j);
  }
  if (ans1 == 1e9)
    puts("-1");
  else {
    for (int i = (1); i <= (ans1); i++) ans2 *= i;
    printf("%d %d\n", ans1, ans2);
  }
}
