#include <bits/stdc++.h>
using namespace std;
class myistream {
  static const int maxsize = 100007;
  char *s;
  char *cur, *upperbound;
  FILE *fp;
  bool last_read;
  bool end_of_file;
  bool to_return;
  void upd() {
    int num = fread(s, sizeof(char), maxsize, fp);
    if (num < maxsize) last_read = true, upperbound = s + num;
    if (!num) end_of_file = true;
    cur = s;
  }
  char scan() {
    if (cur >= upperbound) {
      if (last_read)
        end_of_file = true;
      else
        upd();
    }
    return *cur++;
  }
  bool isspace(char c) {
    return c == ' ' || c == '\n' || c == '\r' || c == '\t';
  }

 public:
  myistream(FILE *_fp)
      : last_read(false), end_of_file(false), to_return(false), fp(_fp) {
    s = new char[maxsize + 2];
    upperbound = s + maxsize;
    cur = s + maxsize;
  }
  operator void *() const { return to_return ? 0 : (void *)this; }
  bool operator!() const { return to_return; }
  myistream &operator>>(int &a) {
    if (!end_of_file) {
      char c = scan();
      while (isspace(c) && !end_of_file) c = scan();
      if (end_of_file) {
        to_return = true;
        return *this;
      }
      a = 0;
      bool nega = false;
      if (c == '-') nega = true, c = scan();
      while (!isspace(c) && !end_of_file) {
        a = a * 10 + (((int)c) & 15);
        c = scan();
      }
      if (nega) a = -a;
    } else
      to_return = true;
    return *this;
  }
  myistream &operator>>(char &c) {
    if (!end_of_file) {
      c = scan();
      while (isspace(c) && !end_of_file) c = scan();
    }
    if (end_of_file) to_return = true;
    return *this;
  }
  myistream &operator>>(bool &b) {
    if (!end_of_file) {
      char c = scan();
      while (isspace(c) && !end_of_file) c = scan();
      b = (c == '1');
    }
    if (end_of_file) to_return = true;
    return *this;
  }
  myistream &operator>>(char *s) {
    if (!end_of_file) {
      char c = scan();
      while (isspace(c) && !end_of_file) c = scan();
      if (end_of_file) {
        to_return = true;
        return *this;
      }
      while (!isspace(c) && !end_of_file) *s++ = c, c = scan();
      *s = '\0';
    } else
      to_return = true;
    return *this;
  }
  myistream &operator>>(string &s) {
    s.clear();
    if (!end_of_file) {
      char c = scan();
      while (isspace(c) && !end_of_file) c = scan();
      if (end_of_file) {
        to_return = true;
        return *this;
      }
      while (!isspace(c) && !end_of_file) s.push_back(c), c = scan();
    } else
      to_return = true;
    return *this;
  }
};
myistream in(stdin);
const int maxn = 3000, inf = 0x3fffffff;
bool pic[maxn][maxn];
int vis[maxn][maxn] = {};
int n;
int ct = 1;
int mini, maxi, minj, maxj;
int minipj, maxipj, minimj, maximj;
int di[] = {0, 1, 0, -1};
int dj[] = {1, 0, -1, 0};
inline bool legal(int x) { return x >= 0 && x < n; }
void dfs(int i, int j, int kkk) {
  mini = min(mini, i);
  maxi = max(maxi, i);
  minj = min(minj, j);
  maxj = max(maxj, j);
  minipj = min(minipj, i + j);
  maxipj = max(maxipj, i + j);
  minimj = min(minimj, i - j);
  maximj = max(maximj, i - j);
  vis[i][j] = kkk;
  for (int k = 0; k < (4); ++k) {
    int ni = i + di[k], nj = j + dj[k];
    if (legal(ni) && legal(nj) && !vis[ni][nj] && pic[ni][nj]) dfs(ni, nj, kkk);
  }
}
bool equal(double a, double b) { return abs(double(a - b)) < 3.; }
int sq = 0, cir = 0;
double sin45 = sqrt(.5);
double s2 = sqrt(2.);
int main(void) {
  in >> n;
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (n); ++j) in >> pic[i][j];
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (n); ++j)
      if (pic[i][j] && !vis[i][j]) {
        mini = maxi = i;
        minj = maxj = j;
        minipj = maxipj = i + j;
        minimj = maximj = i - j;
        dfs(i, j, ct);
        int midi = (mini + maxi) / 2, midj = (minj + maxj) / 2;
        int r = (maxi - mini) / 2;
        if (equal(maxi - mini, maxj - minj) &&
            equal(s2 * (maxi - mini), maxipj - minipj) &&
            equal(s2 * (maxi - mini), maximj - minimj))
          ++cir;
        else
          ++sq;
        ++ct;
      }
  cout << cir << ' ' << sq << endl;
  return 0;
}
