#include <bits/stdc++.h>
using namespace std;
bool Get() {
  char c;
  while (c = getchar(), c != '0' && c != '1')
    ;
  return c == '1';
}
const int V[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
const double Pi = acos(-1);
bool Map[2000][2000];
double Factor_0 = 1, Factor_1 = 1;
double Dist(double X, double Y) { return X * X + Y * Y; }
int BFS(int Sx, int Sy, int N) {
  static int Qx[4000000], Qy[4000000];
  Qx[0] = Sx;
  Qy[0] = Sy;
  Map[Sx][Sy] = false;
  int F = 0, R = 1;
  while (F < R) {
    int X0 = Qx[F], Y0 = Qy[F];
    F++;
    for (int D = 0; D < 4; D++) {
      int X1 = X0 + V[D][0], Y1 = Y0 + V[D][1];
      if (X1 < 0 || X1 == N || Y1 < 0 || Y1 == N) continue;
      if (Map[X1][Y1]) {
        Map[X1][Y1] = false;
        Qx[R] = X1;
        Qy[R] = Y1;
        R++;
      }
    }
  }
  if (R < 50) return -1;
  double Ox = 0, Oy = 0;
  for (int i = 0; i < R; i++) Ox += Qx[i];
  for (int i = 0; i < R; i++) Oy += Qy[i];
  Ox /= R;
  Oy /= R;
  double Size = 0;
  for (int i = 0; i < R; i++) Size = max(Size, Dist(Qx[i] - Ox, Qy[i] - Oy));
  double Error_0 = (Size * Pi) / (R * Factor_0);
  double Error_1 = (Size * 2) / (R * Factor_1);
  return Error_0 * Error_1 > 1;
}
int main() {
  int N;
  scanf("%d", &N);
  for (int i = 0; i < N; i++)
    for (int j = 0; j < N; j++) Map[i][j] = Get();
  for (int i = 1; i + 1 < N; i++)
    for (int j = 1; j + 1 < N; j++)
      if (Map[i][j] && !Map[i - 1][j] && !Map[i][j - 1] && !Map[i][j + 1] &&
          !Map[i + 1][j]) {
        Factor_0 = 1.40;
        Factor_1 = 1.25;
      }
  int Ans_0 = 0, Ans_1 = 0;
  for (int i = 0; i < N; i++)
    for (int j = 0; j < N; j++)
      if (Map[i][j]) {
        int T = BFS(i, j, N);
        if (T == 0) Ans_0++;
        if (T == 1) Ans_1++;
      }
  printf("%d %d\n", Ans_0, Ans_1);
  return 0;
}
