#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1);
int i, n, m, s[2200][2200], a[2200][2200], j, numC, numS, num, Lx, Ly, k, Rx,
    Ry, dis, q[120000][2], D, U, L, R, tot, e;
double debug[120][2];
void read(int &x) {
  char c;
  while ((c = getchar()) == ' ' || c == '\n' || c == '\r')
    ;
  x = c - 48;
}
bool dfs(int x, int y) {
  if (x < 1 || x > n || y < 1 || y > n || !a[x][y]) return 1;
  if (a[x][y] == -1) return 0;
  a[x][y] = -1;
  bool f = dfs(x - 1, y) | dfs(x + 1, y) | dfs(x, y - 1) | dfs(x, y + 1);
  L = min(L, x);
  R = max(R, x);
  U = min(U, y);
  D = max(D, y);
  num++;
  if (f) q[++tot][0] = x, q[tot][1] = y;
  return 0;
}
int main() {
  scanf("%d", &n);
  for (i = 1; i <= n; ++i)
    for (j = 1; j <= n; ++j) {
      read(a[i][j]);
      s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];
    }
  int M = 6;
  for (i = 1; i <= n; ++i)
    for (j = 1; j <= n; ++j) {
      int num =
          s[i + M][j + M] - s[i + M][j - 1] - s[i - 1][j + M] + s[i - 1][j - 1];
      if (num >= (M + 1) * (M + 1) * 0.4)
        a[i][j] = 1;
      else
        a[i][j] = 0;
    }
  for (i = 1; i <= n - M - 5; ++i)
    for (j = 1; j <= n - M - 5; ++j)
      if (a[i][j] == 1) {
        num = tot = 0;
        L = R = i;
        U = D = j;
        dfs(i, j);
        if (num <= 50) continue;
        double sx = (L + R) / 2.0, sy = (U + D) / 2.0, near = 1e8, far = 0;
        for (k = 1; k <= tot; ++k) {
          double D =
              (q[k][0] - sx) * (q[k][0] - sx) + (q[k][1] - sy) * (q[k][1] - sy);
          if (D < near) near = D;
          if (D > far) far = D;
        }
        if (far / near > 1.4)
          numS++;
        else
          numC++, debug[++e][0] = near, debug[e][1] = far;
      }
  printf("%d %d\n", numC, numS);
}
