#include <bits/stdc++.h>
using namespace std;
int N, Matrix[2005][2005];
char S[2005];
int Ord[2005], Grades[2005], Aux[2005], Fact[] = {1, 1, 2, 6, 24, 120, 720};
bool Flip[2005];
void Read() {
  scanf("%d", &N);
  for (int i = 1; i <= N; i++) {
    scanf("%s", S + 1);
    for (int j = 1; S[j] != 0; j++) {
      Matrix[i][j] = S[j] - '0';
      Grades[i] += Matrix[i][j];
    }
  }
}
int getGrade(int node) { return Aux[node]; }
bool cmp(int a, int b) { return getGrade(a) < getGrade(b); }
void flip(int i) {
  for (int j = 1; j <= N; j++) {
    Grades[i] -= Matrix[i][j];
    Matrix[i][j] ^= 1;
    Grades[i] += Matrix[i][j];
    Grades[j] -= Matrix[j][i];
    Grades[j] += Matrix[j][i] ^ 1;
    Matrix[j][i] ^= 1;
  }
}
bool isStronglyConnected() {
  for (int i = 1; i <= N; i++) {
    Aux[i] = Grades[i];
  }
  for (int i = 1; i <= N; i++) Ord[i] = i;
  sort(Ord + 1, Ord + N + 1, cmp);
  int gradeSum = 0;
  for (int i = 1; i < N; i++) {
    gradeSum += (getGrade(Ord[i]));
    if (gradeSum == i * (i - 1) / 2) return 0;
  }
  return 1;
}
void reinit() {
  for (int i = 1; i <= N; i++)
    if (Flip[i]) {
      for (int j = 1; j <= N; j++) {
        int val = Matrix[i][j];
        if (i != j) {
          Matrix[i][j] = 1 - val;
          Matrix[j][i] = val;
        }
      }
    }
}
void SolveNBig() {
  int ways = 0;
  if (isStronglyConnected()) {
    printf("0 1\n");
    return;
  }
  for (int i = 1; i <= N; i++) {
    flip(i);
    if (isStronglyConnected()) ++ways;
    flip(i);
  }
  printf("%d %d\n", 1, ways);
}
void SolveNSmall() {
  int Min = N + 1, ways = 0;
  for (int conf = 0; conf < (1 << N); conf++) {
    int cnt = 0;
    for (int j = 0; j < N; j++)
      if (conf & (1 << j)) flip(j + 1), ++cnt;
    if (isStronglyConnected()) {
      if (Min == cnt) ways += Fact[cnt];
      if (Min > cnt) {
        Min = cnt;
        ways = Fact[cnt];
      }
    }
    for (int j = 0; j < N; j++)
      if (conf & (1 << j)) flip(j + 1);
  }
  if (Min == N + 1) {
    printf("-1\n");
    return;
  }
  printf("%d %d\n", Min, ways);
}
int main() {
  Read();
  if (N >= 7)
    SolveNBig();
  else
    SolveNSmall();
  return 0;
}
