#include <bits/stdc++.h>
using namespace std;
const long long inf = 1LL << 55;
const long long mod = 1e9 + 7;
long long n;
long long bit[400];
long long dx[] = {0, 1, 0, -1, 0, 2, 0, -2};
long long dy[] = {1, 0, -1, 0, 2, 0, -2, 0};
map<pair<long long, vector<long long>>, bool> mp;
bool in(long long x, long long y) { return 0 <= x && x < 3 && 0 <= y && y < 3; }
bool dfs(long long day, vector<long long> v) {
  if (mp.count(make_pair(day, v))) return mp[make_pair(day, v)];
  if (day == n) return true;
  long long x = v[0] % 3, y = v[0] / 3;
  for (long long i = 0; i < 8; i++) {
    vector<long long> nv(7);
    long long tmp = 0;
    long long nx = x + dx[i], ny = y + dy[i];
    if (!in(nx, ny)) continue;
    tmp = 1 << (ny * 4 + nx) | 1 << ((ny + 1) * 4 + nx) |
          1 << (ny * 4 + nx + 1) | 1 << ((ny + 1) * 4 + nx + 1);
    if (bit[day + 1] & tmp) continue;
    long long a[16] = {0};
    for (long long i = 0; i < 6; i++) nv[i + 1] = v[i];
    nv[0] = ny * 3 + nx;
    if (day >= 5) {
      for (long long j = 0; j < 7; j++) {
        long long tx = nv[j] % 3, ty = nv[j] / 3;
        a[ty * 4 + tx]++;
        a[(ty + 1) * 4 + tx]++;
        a[ty * 4 + tx + 1]++;
        a[(ty + 1) * 4 + tx + 1]++;
      }
      bool flag = true;
      for (long long j = 0; j < 16; j++) {
        flag &= (a[j] != 0);
      }
      if (!flag) continue;
    }
    if (dfs(day + 1, nv)) return mp[make_pair(day, v)] = true;
  }
  return mp[make_pair(day, v)] = false;
}
signed main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  cout << fixed << setprecision(12);
  while (cin >> n, n) {
    mp.clear();
    for (long long i = 0; i < n; i++) {
      bit[i] = 0;
      for (long long j = 0; j < 16; j++) {
        long long b;
        cin >> b;
        bit[i] |= b << j;
      }
    }
    long long tmp = 0;
    tmp = 1 << 5 | 1 << 6 | 1 << 9 | 1 << 10;
    if (bit[0] & tmp) {
      cout << 0 << endl;
      continue;
    }
    vector<long long> v(7, -1);
    v[0] = 4;
    cout << (long long)dfs(0, v) << endl;
  }
  return 0;
}
