#include <bits/stdc++.h>
using namespace std;
const double bili = acos(-1.0) / 4;
const double pi = acos(-1.0);
bool IN() {
  char ch = getchar();
  while (ch < '0' || ch > '9') ch = getchar();
  return bool(ch - '0');
}
int n, ptot, yuan;
bool a[2005][2005], vis[2005][2005];
int sum[2005][2005];
pair<int, int> Q[4000005];
int l, r, ans1;
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
double C[100005];
bool edge(int x, int y) {
  for (int i = 0; i < 4; i++) {
    int zx = x + dx[i], zy = y + dy[i];
    if (zx <= 0 || zx > n || zy <= 0 || zy > n || a[zx][zy] == 0) return 1;
  }
  return 0;
}
void bfs(int x, int y) {
  Q[l = r = 1] = make_pair(x, y);
  int bian = 0;
  for (; l <= r; l++) {
    pair<int, int> u = Q[l];
    if (edge(u.first, u.second)) bian++;
    for (int j = 0; j < 4; j++) {
      pair<int, int> v = make_pair(u.first + dx[j], u.second + dy[j]);
      if (v.first > 0 && v.first <= n && v.second > 0 && v.second <= n &&
          !vis[v.first][v.second]) {
        if (a[v.first][v.second] == 0) continue;
        Q[++r] = v;
        vis[v.first][v.second] = 1;
      }
    }
  }
  int mxy = -211, mxx = 0, miy = 21100, mix = 0, d = 0;
  for (int i = (int)1; i <= (int)r; i++) {
    if (Q[i].second > mxy) {
      mxx = Q[i].first;
      mxy = Q[i].second;
    }
    if (Q[i].second < miy) {
      mix = Q[i].first;
      miy = Q[i].second;
    }
  }
  if (r > 101) {
    sort(Q + 1, Q + r + 1);
    for (int i = 1; i <= 8; i++)
      for (int j = r - 7; j <= r; j++) {
        d = max(d, ((Q[i].first - Q[j].first) * (Q[i].first - Q[j].first) +
                    (Q[i].second - Q[j].second) * (Q[i].second - Q[j].second)));
      }
    ++ans1;
    double z = 1.0 * d / r;
    if (z < 1.55) yuan++;
  }
}
int main() {
  scanf("%d", &n);
  for (int i = (int)1; i <= (int)n; i++)
    for (int j = (int)1; j <= (int)n; j++) a[i][j] = IN();
  for (int i = (int)1; i <= (int)n; i++)
    for (int j = (int)1; j <= (int)n; j++)
      sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + a[i][j];
  for (int i = (int)1; i <= (int)n; i++) {
    for (int j = (int)1; j <= (int)n; j++) {
      int u = ((((i) < (j) ? (i) : (j))) <
                       (((n - i + 1) < (n - j + 1) ? (n - i + 1) : (n - j + 1)))
                   ? (((i) < (j) ? (i) : (j)))
                   : (((n - i + 1) < (n - j + 1) ? (n - i + 1) : (n - j + 1))));
      u = ((u) < (4) ? (u) : (4));
      int sm = sum[i + u - 1][j + u - 1] - sum[i - u + 1 - 1][j + u - 1] -
               sum[i + u - 1][j - u + 1 - 1] +
               sum[i - u + 1 - 1][j - u + 1 - 1],
          total = (2 * u) * (2 * u);
      double lv = 1. * sm / total;
      if (lv > 0.5)
        a[i][j] = 1;
      else
        a[i][j] = 0;
    }
  }
  for (int i = (int)1; i <= (int)n; i++)
    for (int j = (int)1; j <= (int)n; j++) {
      if (vis[i][j]) continue;
      bfs(i, j);
    }
  sort(C + 1, C + ans1 + 1);
  printf("%d %d\n", yuan, ans1 - yuan);
  return 0;
}
