#include #include using namespace std; int sched[16][365]; struct State { int table[4][4]; int day; int cloud[4][4]; State() { day = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if ((i == 1 || i == 2) && (j == 1 || j == 2)) { table[i][j] = 0; cloud[i][j] = 1; } else { table[i][j] = 1; cloud[i][j] = 0; } } } } bool operator < (const State& s) const { if (this->day != s.day) { return this->day < s.day; } for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (this->table[i][j] != s.table[i][j]) { return this->table[i][j] < s.table[i][j]; } if (this->cloud[i][j] != s.cloud[i][j]) { return this->cloud[i][j] < s.cloud[i][j]; } } } return false; } void print() const { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { cout << this->table[i][j] << " "; } cout << endl; } cout << endl; } bool ok() { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (table[i][j] >= 7) { return false; } if (sched[i * 4 + j][this->day] == 1) { if (cloud[i][j] == 1) { return false; } } } } return true; } }; const int dirx[] = { 0, 0, 0, 0, 0, 1, -1, 2, -2 }; const int diry[] = { 0, -1, 1, 2, -2, 0, 0, 0, 0 }; bool next_state(const State& s, State* next, int dir) { int dx = dirx[dir]; int dy = diry[dir]; next->day = s.day + 1; memset(next->cloud, 0, sizeof(next->cloud)); for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (s.cloud[i][j] == 0) { continue; } if (i + dx < 0 || i + dx >= 4) { return false; } if (j + dy < 0 || j + dy >= 4) { return false; } next->cloud[i + dx][j + dy] = 1; } } for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (next->cloud[i][j] == 1) { next->table[i][j] = 0; } else { next->table[i][j] = s.table[i][j] + 1; } } } return next->ok(); } int main() { int n; while (cin >> n) { if (n == 0) { break; } set Q; State start; for (int i = 0; i < n; i++) { for (int j = 0; j < 16; j++) { cin >> sched[j][i]; } } if (!start.ok()) { cout << 0 << endl; continue; } Q.insert(start); int ans = 0; while (!Q.empty()) { State s = *Q.begin(); Q.erase(s); if (s.day >= n) { ans = 1; break; } for (int i = 0; i < 9; i++) { State next; if (!next_state(s, &next, i)) { continue; } Q.insert(next); } } cout << ans << endl; } return 0; }