#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define all(x) (x).begin(),(x).end()
const int mod=1000000007,MAX=103,INF=1<<30;
bool dp[2][9][9][9][9][9][9];

int main(){
    
    std::ifstream in("text.txt");
    std::cin.rdbuf(in.rdbuf());
    cin.tie(0);
    ios::sync_with_stdio(false);
    
    while(1){
        int N;cin>>N;
        if(N==0) break;
        memset(dp,0,sizeof(dp));
        
        vector<vector<int>> A(N,vector<int>(16));
        for(int i=0;i<N;i++){
            for(int j=0;j<16;j++){
                cin>>A[i][j];
            }
        }
        
        if(A[0][5]+A[0][6]+A[0][9]+A[0][10]){
            cout<<0<<endl;
            continue;
        }
        
        dp[0][4][4][4][4][4][4]=1;
        
        vector<vector<int>> ne(9,vector<int>()),rain(9,vector<int>());
        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                if(i%3==j%3||i/3==j/3) ne[i].push_back(j);
            }
            
            rain[i].push_back(i+i/3);
            rain[i].push_back(i+i/3+1);
            rain[i].push_back(i+i/3+4);
            rain[i].push_back(i+i/3+4+1);
        }
        
        for(int t=0;t<N-1;t++){
            for(int i1=0;i1<9;i1++){
                for(int j2=0;j2<5;j2++){
                    int i2=ne[i1][j2];
                    for(int j3=0;j3<5;j3++){
                        int i3=ne[i2][j3];
                        for(int j4=0;j4<5;j4++){
                            int i4=ne[i3][j4];
                            for(int j5=0;j5<5;j5++){
                                int i5=ne[i4][j5];
                                for(int j6=0;j6<5;j6++){
                                    int i6=ne[i5][j6];
                                    
                                    if(dp[t&1][i1][i2][i3][i4][i5][i6]==0) continue;
                                    
                                    for(int j0=0;j0<5;j0++){
                                        int i0=ne[i1][j0];
                                        
                                        vector<int> last(16,INF);
                                        
                                        for(int j=0;j<4;j++){
                                            last[rain[i6][j]]=6;
                                        }
                                        for(int j=0;j<4;j++){
                                            last[rain[i5][j]]=5;
                                        }
                                        for(int j=0;j<4;j++){
                                            last[rain[i4][j]]=4;
                                        }
                                        for(int j=0;j<4;j++){
                                            last[rain[i3][j]]=3;
                                        }
                                        for(int j=0;j<4;j++){
                                            last[rain[i2][j]]=2;
                                        }
                                        for(int j=0;j<4;j++){
                                            last[rain[i1][j]]=1;
                                        }
                                        for(int j=0;j<4;j++){
                                            last[rain[i0][j]]=0;
                                        }
                                        
                                        bool ok=true;
                                        
                                        for(int i=0;i<16;i++){
                                            if(last[i]==INF&&t>=5) ok=false;
                                            if(last[i]==0&&A[t+1][i]) ok=false;
                                        }
                                        
                                        if(ok) dp[(t+1)&1][i0][i1][i2][i3][i4][i5]=1;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            
            for(int i1=0;i1<9;i1++){
                for(int i2=0;i2<9;i2++){
                    for(int i3=0;i3<9;i3++){
                        for(int i4=0;i4<9;i4++){
                            for(int i5=0;i5<9;i5++){
                                for(int i6=0;i6<9;i6++){
                                    dp[t&1][i1][i2][i3][i4][i5][i6]=0;
                                }
                            }
                        }
                    }
                }
            }
        }
        
        bool ans=false;
        
        for(int i1=0;i1<9;i1++){
            for(int i2=0;i2<9;i2++){
                for(int i3=0;i3<9;i3++){
                    for(int i4=0;i4<9;i4++){
                        for(int i5=0;i5<9;i5++){
                            for(int i6=0;i6<9;i6++){
                                ans|=dp[(N-1)&1][i1][i2][i3][i4][i5][i6];
                            }
                        }
                    }
                }
            }
        }
        
        cout<<ans<<endl;
    }
}



Measured memory_bytes: 4224