#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void smn(T &a, const T &b) {
  if (b < a) a = b;
}
template <class T>
inline void smx(T &a, const T &b) {
  if (b > a) a = b;
}
template <class T>
inline T rev(const T &a) {
  T _ = a;
  reverse(_.begin(), _.end());
  return _;
}
const double eps = 1e-9;
const long double leps = 1e-14;
const int MN = 2000 + 1000;
bool mp[MN][MN];
bool mark[MN][MN];
int n;
int c1, c2;
pair<int, int> f1, f2, f3, f4;
int dis(pair<int, int> a, pair<int, int> b) {
  return ((((a.first - b.first)) * ((a.first - b.first)))) +
         ((((a.second - b.second)) * ((a.second - b.second))));
}
void dfs(int a, int b) {
  mark[a][b] = 1;
  if (a < f1.first || (a == f1.first && b < f1.second))
    f1 = pair<int, int>(a, b);
  if (a < f2.first || (a == f2.first && b > f2.second))
    f2 = pair<int, int>(a, b);
  if (a > f3.first || (a == f3.first && b > f3.second))
    f3 = pair<int, int>(a, b);
  if (a > f4.first || (a == f4.first && b < f4.second))
    f4 = pair<int, int>(a, b);
  for (int i = a - 1; i <= a + 1; i++)
    for (int j = b - 1; j <= b + 1; j++)
      if (abs(a - i) + abs(j - b) == 1 && i >= 0 && j >= 0 && i < n && j < n &&
          mp[i][j] && !mark[i][j])
        dfs(i, j);
}
int main(int argc, char *argv[]) {
  ios_base::sync_with_stdio(false);
  cin >> n;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) cin >> mp[i][j];
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      if (!mark[i][j] && mp[i][j]) {
        f1 = f2 = f3 = f4 = pair<int, int>(i, j);
        dfs(i, j);
        if (dis(f1, f2) == dis(f2, f3) && dis(f1, f2) == dis(f3, f4) &&
            dis(f1, f2) == dis(f4, f1))
          c1++;
        else
          c2++;
      }
  cout << c2 << " " << c1 << '\n';
  return 0;
}
