#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &num) {
  T x = 0, f = 1;
  char ch = getchar();
  for (; ch > '9' || ch < '0'; ch = getchar())
    if (ch == '-') f = -1;
  for (; ch <= '9' && ch >= '0'; ch = getchar())
    x = (x << 3) + (x << 1) + (ch ^ '0');
  num = x * f;
}
int n, e[2005][2005], de[2005], a[2005];
char s[2005];
int ok() {
  for (int i = 1; i <= n; i++) a[i] = de[i];
  sort(a + 1, a + n + 1);
  int sum = 0;
  for (int i = 1; i < n; i++) {
    sum += a[i];
    if (sum == i * (i - 1) / 2) return 0;
  }
  return 1;
}
void rev(int j) {
  for (int i = 1; i <= n; i++)
    if (i != j) {
      if (e[i][j]) {
        e[i][j] = 0;
        e[j][i] = 1;
        --de[i];
        ++de[j];
      } else {
        e[i][j] = 1;
        e[j][i] = 0;
        --de[j];
        ++de[i];
      }
    }
}
void solve() {
  int ans = 0;
  for (int i = 1; i <= n; i++) {
    rev(i);
    ans += ok();
    rev(i);
  }
  if (!ans)
    puts("-1");
  else
    printf("1 %d\n", ans);
}
void brute() {
  int ans = 0x3f3f3f3f, cnt = 0;
  for (int S = 1; S < (1 << n); S++) {
    for (int i = 1; i <= n; i++)
      if ((S >> (i - 1)) & 1) rev(i);
    int l = __builtin_popcount(S);
    if (ok()) {
      if (ans > l)
        ans = l, cnt = 1;
      else if (ans == l)
        ++cnt;
    }
    for (int i = 1; i <= n; i++)
      if ((S >> (i - 1)) & 1) rev(i);
  }
  if (ans == 0x3f3f3f3f)
    puts("-1");
  else {
    for (int i = 1; i <= ans; i++) cnt = 1ll * cnt * i % 998244353;
    printf("%d %d\n", ans, cnt);
  }
}
int main() {
  read(n);
  for (int i = 1; i <= n; i++) {
    scanf("%s", s + 1);
    for (int j = 1; j <= n; j++) {
      e[i][j] = s[j] - '0';
      de[i] += e[i][j];
    }
  }
  if (ok()) {
    puts("0 1");
    return 0;
  }
  if (n <= 6)
    brute();
  else
    solve();
  return 0;
}
