#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int T;
char g[6][6];
char backup[6][6];
int dx[5]={-1,0,1,0,0};
int dy[5]={0,0,0,-1,1};
void turn(int x,int y)
{
for(int i=0;i<5;i++)
{
int a=x+dx[i];
int b=y+dy[i];
if(a<0||a>=5||b<0||b>=5)
{
continue;
}
g[a][b]^=1;
}
}
int main()
{
cin>>T;
while(T--)
{
for(int i=0;i<5;i++)
{
cin>>g[i];
}
int minstep=10;
for(int i=0;i<32;i++)
{
int step=0;
memcpy(backup,g,sizeof g);
for(int k=0;k<5;k++)
{
if(i>>k&1)
{
turn(0,k);
step++;
}
}
for(int i=0;i<4;i++)
{
for(int k=0;k<5;k++)
{
if(g[i][k]=='0')
{
turn(i+1,k);
step++;
}
}
}
// bool islight=true;
//for(int i=0;i<5;i++)
// {
// if(g[4][i]=='0')
// {
// islight=false;
// break;
//}
//}
//maxstep=min(maxstep,step);//逻辑漏洞,全亮才求最小值
//memcpy(g,backup,sizeof backup);
bool dark = false;
for (int i = 0; i < 5; i ++ )
if (g[4][i] == '0')
{
dark = true;
break;
}
if (!dark) minstep = min(minstep, step);
memcpy(g, backup, sizeof g);
}
if(minstep<=6)
{
cout<<minstep<<endl;
}
else
{
cout<<-1<<endl;
}
}
}
浙公网安备 33010602011771号