#include <bits/stdc++.h>
using namespace std;
int fuck[2010], de[2010], n;
char mp[2010][2010];
int check() {
  sort(fuck + 1, fuck + 1 + n);
  int sum = 0;
  for (int i = 1; i < n; i++) {
    sum += fuck[i];
    if (sum == i * (i - 1) / 2) return 0;
  }
  return 1;
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    scanf("%s", mp[i] + 1);
    for (int j = 1; j <= n; j++) {
      if (mp[i][j] == '1') de[i]++, fuck[i] = de[i];
    }
  }
  if (check()) {
    cout << 0 << ' ' << 1;
    return 0;
  }
  if (n <= 6) {
    int minn = 1e9, res = 0;
    for (int i = 1; i < (1 << n); i++) {
      int now = 0;
      for (int j = 1; j <= n; j++) {
        if ((1 << (j - 1)) & i) {
          now++;
          de[j] = n - 1 - de[j];
          for (int k = 1; k <= n; k++) {
            if (k == j) continue;
            if (mp[j][k] == '1') {
              mp[j][k] = '0';
              mp[k][j] = '1';
              de[k]++;
            } else {
              mp[j][k] = '1';
              mp[k][j] = '0';
              de[k]--;
            }
          }
        }
      }
      for (int j = 1; j <= n; j++) fuck[j] = de[j];
      for (int j = 1; j <= n; j++) {
        if ((1 << (j - 1)) & i) {
          de[j] = n - 1 - de[j];
          for (int k = 1; k <= n; k++) {
            if (k == j) continue;
            if (mp[j][k] == '1') {
              mp[j][k] = '0';
              mp[k][j] = '1';
              de[k]++;
            } else {
              mp[j][k] = '1';
              mp[k][j] = '0';
              de[k]--;
            }
          }
        }
      }
      if (now > minn) continue;
      if (check()) {
        if (now < minn)
          minn = now, res = 1;
        else
          res++;
      }
    }
    if (minn == 1e9)
      cout << -1;
    else {
      for (int i = 1; i <= minn; i++) res *= i;
      cout << minn << ' ' << res;
    }
  } else {
    int res = 0;
    for (int j = 1; j <= n; j++) {
      de[j] = n - 1 - de[j];
      for (int k = 1; k <= n; k++) {
        if (k == j) continue;
        if (mp[j][k] == '1') {
          mp[j][k] = '0';
          mp[k][j] = '1';
          de[k]++;
        } else {
          mp[j][k] = '1';
          mp[k][j] = '0';
          de[k]--;
        }
      }
      for (int j = 1; j <= n; j++) fuck[j] = de[j];
      de[j] = n - 1 - de[j];
      for (int k = 1; k <= n; k++) {
        if (k == j) continue;
        if (mp[j][k] == '1') {
          mp[j][k] = '0';
          mp[k][j] = '1';
          de[k]++;
        } else {
          mp[j][k] = '1';
          mp[k][j] = '0';
          de[k]--;
        }
      }
      if (check()) res++;
    }
    cout << 1 << ' ' << res << endl;
  }
}
