#include <bits/stdc++.h>
using namespace std;
int N;
string mat[50 + 10];
int zc[50 + 10][50 + 10];
int oc[50 + 10][50 + 10];
int zcf(int i, int j, int ei, int ej) {
  int rs = zc[ei][ej];
  if (i) rs -= zc[i - 1][ej];
  if (j) rs -= zc[ei][j - 1];
  if (i && j) rs += zc[i - 1][j - 1];
  return rs;
}
int ocf(int i, int j, int ei, int ej) {
  int rs = oc[ei][ej];
  if (i) rs -= oc[i - 1][ej];
  if (j) rs -= oc[ei][j - 1];
  if (i && j) rs += oc[i - 1][j - 1];
  return rs;
}
int bad(int i, int j) {
  if (i < 0 || j < 0 || i >= N || j >= N) return 0;
  return mat[i][j] != '0';
}
bool cellOk(int i, int j) {
  int c = bad(i - 1, j - 1) + bad(i - 1, j + 1) + bad(i + 1, j - 1) +
          bad(i + 1, j + 1);
  int v = mat[i][j] - '0';
  return c == v;
}
bool ok(int bi, int bj, int ei, int ej) {
  for (int i = bi; i <= ei; i++) {
    for (int j = bj; j <= ej; j++) {
      if (!cellOk(i, j)) return false;
    }
  }
  return true;
}
int main() {
  cin >> N;
  for (int i = 0; i < N; i++) {
    cin >> mat[i];
    for (int j = 0; j < N; j++) {
      zc[i][j] = mat[i][j] == '0';
      oc[i][j] = mat[i][j] != '0';
      if (i) {
        zc[i][j] += zc[i - 1][j];
        oc[i][j] += oc[i - 1][j];
      }
      if (j) {
        zc[i][j] += zc[i][j - 1];
        oc[i][j] += oc[i][j - 1];
      }
      if (i && j) {
        zc[i][j] -= zc[i - 1][j - 1];
        oc[i][j] -= oc[i - 1][j - 1];
      }
    }
  }
  for (int bi = 0; bi < N; bi++) {
    for (int bj = 0; bj < N; bj++) {
      for (int ei = bi; ei < N; ei++) {
        for (int ej = bj; ej < N; ej++) {
          if (!zcf(bi, bj, ei, ej) && ocf(bi, bj, ei, ej) == oc[N - 1][N - 1]) {
            if (ok(bi, bj, ei, ej)) {
              cout << "Yes\n";
            } else {
              cout << "No\n";
            }
            exit(0);
          }
        }
      }
    }
  }
  cout << "No\n";
}
