#include <bits/stdc++.h>
using namespace std;
int Sche[16];
struct Node {
  int Rain_freq[16];
  int cloudPos;
};
int main() {
  while (true) {
    int periods;
    cin >> periods;
    if (periods == 0) break;
    queue<Node> q;
    Node now;
    now.cloudPos = 6;
    for (int i = 0; i < 16; i++) {
      cin >> Sche[i];
      now.Rain_freq[i] = 0;
    }
    bool flag = false;
    if (Sche[now.cloudPos - 1] != 1 && Sche[now.cloudPos] != 1 &&
        Sche[now.cloudPos + 3] != 1 && Sche[now.cloudPos + 4] != 1)
      flag = true;
    q.push(now);
    int days = 1;
    while (flag && !q.empty() && days < periods) {
      days++;
      for (int i = 0; i < 16; i++) cin >> Sche[i];
      queue<Node> tmp;
      while (!q.empty()) {
        now = q.front();
        q.pop();
        Node s = now;
        for (int i = 0; i < 16; i++) {
          if (i + 1 != s.cloudPos && i + 1 != s.cloudPos + 1 &&
              i + 1 != s.cloudPos + 4 && i + 1 != s.cloudPos + 5)
            s.Rain_freq[i]++;
          if (s.Rain_freq[i] >= 7) break;
          if (i == 15 && Sche[s.cloudPos - 1] != 1 && Sche[s.cloudPos] != 1 &&
              Sche[s.cloudPos + 3] != 1 && Sche[s.cloudPos + 4] != 1)
            tmp.push(s);
        }
        s = now;
        if ((s.cloudPos - 1) % 4 > 0) {
          s.cloudPos--;
          for (int i = 0; i < 16; i++) {
            if (i + 1 != s.cloudPos && i + 1 != s.cloudPos + 1 &&
                i + 1 != s.cloudPos + 4 && i + 1 != s.cloudPos + 5)
              s.Rain_freq[i]++;
            if (s.Rain_freq[i] >= 7) break;
            if (i == 15 && Sche[s.cloudPos - 1] != 1 && Sche[s.cloudPos] != 1 &&
                Sche[s.cloudPos + 3] != 1 && Sche[s.cloudPos + 4] != 1)
              tmp.push(s);
          }
          s = now;
        }
        if ((s.cloudPos - 1) % 4 == 2) {
          s.cloudPos -= 2;
          for (int i = 0; i < 16; i++) {
            if (i + 1 != s.cloudPos && i + 1 != s.cloudPos + 1 &&
                i + 1 != s.cloudPos + 4 && i + 1 != s.cloudPos + 5)
              s.Rain_freq[i]++;
            if (s.Rain_freq[i] >= 7) break;
            if (i == 15 && Sche[s.cloudPos - 1] != 1 && Sche[s.cloudPos] != 1 &&
                Sche[s.cloudPos + 3] != 1 && Sche[s.cloudPos + 4] != 1)
              tmp.push(s);
          }
          s = now;
        }
        if ((s.cloudPos - 1) % 4 < 2) {
          s.cloudPos++;
          for (int i = 0; i < 16; i++) {
            if (i + 1 != s.cloudPos && i + 1 != s.cloudPos + 1 &&
                i + 1 != s.cloudPos + 4 && i + 1 != s.cloudPos + 5)
              s.Rain_freq[i]++;
            if (s.Rain_freq[i] >= 7) break;
            if (i == 15 && Sche[s.cloudPos - 1] != 1 && Sche[s.cloudPos] != 1 &&
                Sche[s.cloudPos + 3] != 1 && Sche[s.cloudPos + 4] != 1)
              tmp.push(s);
          }
          s = now;
        }
        if ((s.cloudPos - 1) % 4 == 0) {
          s.cloudPos += 2;
          for (int i = 0; i < 16; i++) {
            if (i + 1 != s.cloudPos && i + 1 != s.cloudPos + 1 &&
                i + 1 != s.cloudPos + 4 && i + 1 != s.cloudPos + 5)
              s.Rain_freq[i]++;
            if (s.Rain_freq[i] >= 7) break;
            if (i == 15 && Sche[s.cloudPos - 1] != 1 && Sche[s.cloudPos] != 1 &&
                Sche[s.cloudPos + 3] != 1 && Sche[s.cloudPos + 4] != 1)
              tmp.push(s);
          }
          s = now;
        }
        if ((s.cloudPos - 1) / 4 > 0) {
          s.cloudPos -= 4;
          for (int i = 0; i < 16; i++) {
            if (i + 1 != s.cloudPos && i + 1 != s.cloudPos + 1 &&
                i + 1 != s.cloudPos + 4 && i + 1 != s.cloudPos + 5)
              s.Rain_freq[i]++;
            if (s.Rain_freq[i] >= 7) break;
            if (i == 15 && Sche[s.cloudPos - 1] != 1 && Sche[s.cloudPos] != 1 &&
                Sche[s.cloudPos + 3] != 1 && Sche[s.cloudPos + 4] != 1)
              tmp.push(s);
          }
          s = now;
        }
        if ((s.cloudPos - 1) / 4 == 2) {
          s.cloudPos -= 8;
          for (int i = 0; i < 16; i++) {
            if (i + 1 != s.cloudPos && i + 1 != s.cloudPos + 1 &&
                i + 1 != s.cloudPos + 4 && i + 1 != s.cloudPos + 5)
              s.Rain_freq[i]++;
            if (s.Rain_freq[i] >= 7) break;
            if (i == 15 && Sche[s.cloudPos - 1] != 1 && Sche[s.cloudPos] != 1 &&
                Sche[s.cloudPos + 3] != 1 && Sche[s.cloudPos + 4] != 1)
              tmp.push(s);
          }
          s = now;
        }
        if ((s.cloudPos - 1) / 4 < 2) {
          s.cloudPos += 4;
          for (int i = 0; i < 16; i++) {
            if (i + 1 != s.cloudPos && i + 1 != s.cloudPos + 1 &&
                i + 1 != s.cloudPos + 4 && i + 1 != s.cloudPos + 5)
              s.Rain_freq[i]++;
            if (s.Rain_freq[i] >= 7) break;
            if (i == 15 && Sche[s.cloudPos - 1] != 1 && Sche[s.cloudPos] != 1 &&
                Sche[s.cloudPos + 3] != 1 && Sche[s.cloudPos + 4] != 1)
              tmp.push(s);
          }
          s = now;
        }
        if ((s.cloudPos - 1) / 4 == 0) {
          s.cloudPos += 8;
          for (int i = 0; i < 16; i++) {
            if (i + 1 != s.cloudPos && i + 1 != s.cloudPos + 1 &&
                i + 1 != s.cloudPos + 4 && i + 1 != s.cloudPos + 5)
              s.Rain_freq[i]++;
            if (s.Rain_freq[i] >= 7) break;
            if (i == 15 && Sche[s.cloudPos - 1] != 1 && Sche[s.cloudPos] != 1 &&
                Sche[s.cloudPos + 3] != 1 && Sche[s.cloudPos + 4] != 1)
              tmp.push(s);
          }
          s = now;
        }
      }
      q.swap(tmp);
    }
    if (!q.empty() && flag)
      cout << 1 << endl;
    else
      cout << 0 << endl;
  }
  return 0;
}
