#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T& x) {
  bool fu = 0;
  char c;
  for (c = getchar(); c <= 32; c = getchar())
    ;
  if (c == '-') fu = 1, c = getchar();
  for (x = 0; c > 32; c = getchar()) x = x * 10 + c - '0';
  if (fu) x = -x;
};
template <class T>
inline void read(T& x, T& y) {
  read(x);
  read(y);
}
template <class T>
inline void read(T& x, T& y, T& z) {
  read(x);
  read(y);
  read(z);
}
inline char getc() {
  char c;
  for (c = getchar(); c <= 32; c = getchar())
    ;
  return c;
}
const int N = 2010;
const int D = 6;
const long double pi = 2 * acos(0);
const long double lit = 0.65;
const int dx[] = {0, 0, 1, -1};
const int dy[] = {1, -1, 0, 0};
int n, m, i, j, k, l, p, x, y;
int a[N][N], c[N][N];
long double K0[111][111];
bool pd(int x, int y) { return x >= 1 && x <= n && y >= 1 && y <= n; }
int q[N * N][2];
bool v[N][N];
int cnt[3];
int bfs(int sx, int sy) {
  int i, j, t, k, l, p, x, y, sum = 0, zh = 0;
  pair<int, int> s0, s1;
  q[1][0] = sx;
  q[1][1] = sy;
  v[sx][sy] = 1;
  s0 = s1 = make_pair(sx, sy);
  for (i = j = 1; i <= j; i++) {
    x = q[i][0];
    y = q[i][1];
    ++sum;
    s0 = min(s0, make_pair(x, y));
    s1 = max(s1, make_pair(x, y));
    bool have = 0;
    for (t = 0; t <= 3; t++) {
      int x2 = x + dx[t], y2 = y + dy[t];
      if (pd(x2, y2))
        if (a[x2][y2] == 1) {
          have = 1;
          if (!v[x2][y2]) {
            ++j;
            q[j][0] = x2;
            q[j][1] = y2;
            v[x2][y2] = 1;
          }
        }
    }
    if (!have) zh++;
  }
  long double d = sqrt(((s0.first - s1.first) * (s0.first - s1.first)) +
                       ((s0.second - s1.second) * (s0.second - s1.second)));
  if (d <= 8) return 0;
  long double S1 = d * d / 2, S2 = d * d * pi / 4;
  long double xx = (s0.first + s1.first) / 2, yy = (s0.second + s1.second) / 2;
  long double op = (abs(zh - d * 4 / sqrt(2)) <= abs(zh - pi * d)) * 0.3 +
                   (abs(S1 - sum) <= abs(S2 - sum)) * 0.7;
  if (op > 0.5)
    return 1;
  else
    return 2;
}
int main() {
  read(n);
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++) a[i][j] = getc() - '0';
  for (x = 0; x <= D; x++)
    for (y = 0; y <= D; y++) K0[x][y] = sqrt(((x) * (x)) + ((y) * (y)));
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++) {
      long double tot = 0, cnt = 0;
      for (x = -D; x <= D; x++)
        for (y = -D; y <= D; y++)
          if (pd(i + x, j + y)) {
            cnt += K0[abs(x)][abs(y)];
            tot += a[i + x][j + y] * K0[abs(x)][abs(y)];
          }
      if (1.0 * tot / cnt > lit)
        c[i][j] = 1;
      else
        c[i][j] = 0;
    }
  memcpy(a, c, sizeof(c));
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++)
      if (a[i][j] == 1 && !v[i][j]) cnt[bfs(i, j)]++;
  cout << cnt[2] << ' ' << cnt[1] << endl;
  return 0;
}
