#include <bits/stdc++.h>
using namespace std;
template <class T>
void debug(T begin, T end) {
  for (T i = begin; i != end; ++i) cerr << *i << " ";
  cerr << endl;
}
inline bool valid(int x, int y, int W, int H) {
  return (x >= 0 && y >= 0 && x < W && y < H);
}
const int INF = 100000000;
const double EPS = 1e-8;
const int MOD = 1000000007;
int dx[9] = {1, 0, -1, 0, 0, 0, 2, -2, 0};
int dy[9] = {0, 1, 0, -1, 0, 2, 0, 0, -2};
int main() {
  int D;
  int sch[365][4][4] = {};
  while (cin >> D && D) {
    bool goal = false;
    for (int i = (0); i < (int)(D); ++i)
      for (int y = (0); y < (int)(4); ++y)
        for (int x = (0); x < (int)(4); ++x) cin >> sch[i][y][x];
    static bool used[366][16][2401];
    memset(used, 0, sizeof(used));
    queue<int> qd, qy, qx;
    queue<vector<int> > qv;
    vector<int> s(4, 0);
    qd.push(0);
    qx.push(1);
    qy.push(1);
    qv.push(s);
    while (!qd.empty()) {
      int d = qd.front();
      qd.pop();
      int x = qx.front();
      qx.pop();
      int y = qy.front();
      qy.pop();
      vector<int> v = qv.front();
      qv.pop();
      if (d == D) {
        goal = true;
        break;
      }
      for (int i = (0); i < (int)(4); ++i) v[i]++;
      bool ok = true;
      for (int dy = (0); dy < (int)(2); ++dy)
        for (int dx = (0); dx < (int)(2); ++dx)
          if (sch[d][y + dy][x + dx] == 1) ok = false;
      if (x == 0 && y == 0) v[0] = 0;
      if (x == 2 && y == 0) v[1] = 0;
      if (x == 0 && y == 2) v[2] = 0;
      if (x == 2 && y == 2) v[3] = 0;
      for (int i = (0); i < (int)(4); ++i)
        if (v[i] >= 7) ok = false;
      if (!ok) continue;
      for (int r = (0); r < (int)(9); ++r) {
        bool ok2 = true;
        int nx = x + dx[r];
        int ny = y + dy[r];
        for (int dx = (0); dx < (int)(2); ++dx)
          for (int dy = (0); dy < (int)(2); ++dy)
            ok2 &= valid(nx + dx, ny + dy, 4, 4);
        if (!ok2) continue;
        if (used[d + 1][ny + nx * 4][v[0] + 7 * v[1] + 49 * v[2] + 343 * v[3]])
          continue;
        qd.push(d + 1);
        qx.push(nx);
        qy.push(ny);
        qv.push(v);
      }
    }
    if (goal)
      cout << 1 << endl;
    else
      cout << 0 << endl;
  }
  return 0;
}
