#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2000;
const double pi = acos(-1.0);
int col[MAXN + 10][MAXN + 10], n, vis[MAXN + 10][MAXN + 10], lcnt;
pair<int, int> lis[MAXN * MAXN + 10];
void Smooth() {
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (!col[i][j]) {
        int cnt[2] = {0, 0};
        for (int x_offset = -1; x_offset <= 1; x_offset++) {
          for (int y_offset = -1; y_offset <= 1; y_offset++) {
            if (!x_offset && !y_offset) continue;
            int ni = i + x_offset, nj = j + y_offset;
            cnt[col[ni][nj]]++;
          }
        }
        if (cnt[1] > cnt[0]) col[i][j] = 1;
      }
    }
  }
}
void dfs(int x, int y) {
  vis[x][y] = true;
  lis[++lcnt] = make_pair(x, y);
  for (int x_offset = -1; x_offset <= 1; x_offset++) {
    for (int y_offset = -1; y_offset <= 1; y_offset++) {
      int nx = x + x_offset, ny = y + y_offset;
      if (!((x_offset != 0) ^ (y_offset != 0))) continue;
      if (nx <= 0 || ny <= 0 || nx > n || ny > n || !col[nx][ny]) continue;
      if (!vis[nx][ny]) dfs(nx, ny);
    }
  }
}
double sqr(double u) { return u * u; }
void Debug() {
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) printf("%d ", col[i][j]);
    puts("");
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) scanf("%d", &col[i][j]);
  }
  for (int i = 1; i <= 0; i++) Smooth();
  int cnt[2] = {0, 0};
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (!col[i][j] || vis[i][j]) continue;
      lcnt = 0;
      dfs(i, j);
      if (lcnt < 150) continue;
      sort(lis + 1, lis + 1 + lcnt);
      double MaxDis = sqr(lis[1].first - lis[lcnt].first) +
                      sqr(lis[1].second - lis[lcnt].second);
      if (lcnt > MaxDis / 2 * 1.1)
        cnt[0]++;
      else
        cnt[1]++;
    }
  }
  printf("%d %d\n", cnt[0], cnt[1]);
  return 0;
}
