#include<bits/stdc++.h>
using namespace std;
int mx[9]={0,1,-1,2,-2,4,-4,8,-8};
struct node{
int x,t;
int vis[20];
}a;
node b;
bool tu[20][370],z,cnt;
int n;
int main(){
while(cin>>n&&n){
queue<node>q;
for(int i=1;i<=n;i++){
for(int j=1;j<=16;j++){
cin>>tu[j][i];
}
}
if(tu[6][1]||tu[7][1]||tu[10][1]||tu[11][1]){
cout<<"0"<<endl;
continue;
}
a.x=6;
a.t=1;
for(int i=1;i<=16;i++){
a.vis[i]=1;
}
cnt=0;
a.vis[6]=0;
a.vis[7]=0;
a.vis[10]=0;
a.vis[11]=0;
q.push(a);
while(!q.empty()){
if(cnt) break;
a=q.front();
q.pop();
int t=a.t+1;
int x=a.x;
for(int j=1;j<=9;j++){
z=0;
x=a.x+mx[j];
if(x>=13||x<1||x%4==0) continue;
if(tu[x][t]||tu[x+1][t]||tu[x+4][t]||tu[x+5][t]){
z=1;
continue;
}
for(int i=1;i<=16;i++){
b.vis[i]=a.vis[i]+1;
if(x==i||i==x+1||i==x+4||i==x+5) b.vis[i]=0;
if(b.vis[i]>=7){
z=1;
break;
}
}
if(z==1) continue;
b.t=t;
b.x=x;
if(t==n){
cnt=1;
break;
}
q.push(b);
}
}
cout<<cnt<<endl;
}
return 0;
}