#include <bits/stdc++.h>
using namespace std;
struct state {
  int p, x, y, a, b, c, d;
};
int dy[] = {-1, 0, 1, 0};
int dx[] = {0, 1, 0, -1};
int n;
int t[367][4][4];
bool visited[367][3][3][8][8][8][8];
int solve() {
  memset(visited, 0, sizeof(visited));
  visited[0][1][1][1][1][1][1] = true;
  queue<state> Q;
  Q.push((state){0, 1, 1, 1, 1, 1, 1});
  while (!Q.empty()) {
    state s = Q.front();
    Q.pop();
    if (s.a == 7 || s.b == 7 || s.c == 7 || s.d == 7) continue;
    if (t[s.p][s.y][s.x]) continue;
    if (t[s.p][s.y + 1][s.x]) continue;
    if (t[s.p][s.y][s.x + 1]) continue;
    if (t[s.p][s.y + 1][s.x + 1]) continue;
    if (s.p == n) return 1;
    for (int i = 0; i < 4; i++) {
      for (int j = 0; j <= 2; j++) {
        int np = s.p + 1;
        int ny = s.y + dy[i] * j;
        int nx = s.x + dx[i] * j;
        if (ny < 0 || 2 < ny) continue;
        if (nx < 0 || 2 < nx) continue;
        int na = s.a + 1, nb = s.b + 1, nc = s.c + 1, nd = s.d + 1;
        if (ny == 0 && nx == 0)
          na = 1;
        else if (ny == 0 && nx == 2)
          nb = 1;
        else if (ny == 2 && nx == 0)
          nc = 1;
        else if (ny == 2 && nx == 2)
          nd = 1;
        if (visited[np][ny][nx][na][nb][nc][nd]) continue;
        visited[np][ny][nx][na][nb][nc][nd] = true;
        Q.push((state){np, ny, nx, na, nb, nc, nd});
      }
    }
  }
  return 0;
}
int main() {
  while (1) {
    cin >> n;
    if (n == 0) break;
    memset(t, 0, sizeof(t));
    for (int i = 0; i < n; i++)
      for (int j = 0; j < 4; j++)
        for (int k = 0; k < 4; k++) cin >> t[i][j][k];
    cout << solve() << endl;
  }
  return 0;
}
