#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
int a, b, c, d, i, j, n, m, k, ans;
char mas2[2001][2001];
bitset<2000> mas[2001], ver[2001];
int si[2001];
int main() {
  gets(mas2[0]);
  sscanf(mas2[0], "%d", &n);
  for (int _n((n)-1), i(0); i <= _n; i++) gets(mas2[i]);
  for (int _n((n)-1), i(0); i <= _n; i++)
    for (int _n(n - 1), j(i); j <= _n; j++)
      if (mas2[i][j] == '1') {
        mas[i].set(j);
      }
  for (int _n((n)-1), i(0); i <= _n; i++) {
    for (int j = n - 1; j > i; --j) {
      if (mas[i].test(j) ^ ver[j].test(i)) {
        ++ans;
        si[i] ^= 1;
        si[j] ^= 1;
        mas[i].flip();
        ver[j].flip();
      }
    }
  }
  for (int _n((n)-1), i(0); i <= _n; i++) mas[i].reset(), ver[i].reset();
  for (int _n((n)-1), i(0); i <= _n; i++)
    for (int _n(n - 1), j(i); j <= _n; j++)
      if (mas2[j][i] == '1') {
        mas[i].set(j);
      }
  for (int _n((n)-1), i(0); i <= _n; i++) {
    for (int j = n - 1; j > i; --j) {
      if (mas[i].test(j) ^ ver[j].test(i)) {
        ++ans;
        si[i] ^= 1;
        si[j] ^= 1;
        mas[i].flip();
        ver[j].flip();
      }
    }
    if (si[i]) mas2[i][i] ^= 1;
    if (mas2[i][i] == '1') {
      ++ans;
      mas[i].flip(i);
    }
  }
  printf("%d\n", ans);
}
