#include <bits/stdc++.h>
using namespace std;
int dx[] = {+0, +1, +0, -1, +0, +2, +0, -2, +0};
int dy[] = {+1, +0, -1, +0, +2, +0, -2, +0, +0};
int n;
int fest[366];
char visited[366][16][7][7][7][7];
bool isValid(int day, int cur) {
  if ((fest[day] >> cur) & 1) return false;
  if ((fest[day] >> (cur + 1)) & 1) return false;
  if ((fest[day] >> (cur + 4)) & 1) return false;
  if ((fest[day] >> (cur + 5)) & 1) return false;
  return true;
}
bool dfs(int day, int cur, int _1, int _3, int _9, int _11) {
  char c = visited[day][cur][_1][_3][_9][_11];
  if (c != 'x') {
    return ((c == 'o') ? true : false);
  }
  if (!isValid(day, cur)) {
    visited[day][cur][_1][_3][_9][_11] = 'x';
    return false;
  }
  if (day >= n - 1) {
    visited[day][cur][_1][_3][_9][_11] = 'o';
    return true;
  }
  int x = cur % 4;
  int y = cur / 4;
  for (int i = 0; i < 9; i++) {
    int nx = x + dx[i];
    int ny = y + dy[i];
    if (!(0 <= nx && nx <= 2 && 0 <= ny && ny <= 2)) continue;
    int next = nx + ny * 4;
    int cost1 = _1 + 1;
    int cost3 = _3 + 1;
    int cost9 = _9 + 1;
    int cost11 = _11 + 1;
    if (next == 0) cost1 = 0;
    if (next == 2) cost3 = 0;
    if (next == 8) cost9 = 0;
    if (next == 10) cost11 = 0;
    if (cost1 >= 7 || cost3 >= 7 || cost9 >= 7 || cost11 >= 7) continue;
    if (dfs(day + 1, next, cost1, cost3, cost9, cost11)) {
      return true;
    }
  }
  return false;
}
int main() {
  while (scanf("%d", &n), n) {
    for (int i = 0; i < n; i++) {
      fest[i] = 0;
      int schedule;
      for (int j = 0; j < 16; j++) {
        scanf("%d", &schedule);
        if (schedule) {
          fest[i] |= (1 << j);
        }
      }
    }
    for (int i = 0; i < 366; i++)
      for (int j = 0; j < 16; j++)
        for (int k = 0; k < 7; k++)
          for (int l = 0; l < 7; l++)
            for (int m = 0; m < 7; m++)
              for (int o = 0; o < 7; o++) visited[i][j][k][l][m][o] = 'x';
    cout << dfs(0, 5, 1, 1, 1, 1) << endl;
  }
  return 0;
}
