#include<iostream>
#include<cstring>
using namespace std;
char oriLights[5];//一个字符一个字节8个比特
char lights[5];///
char Result[5];
int GetBit(char c,int i){////得到c第i位的内容
return (c>>i)&1;
}
void SetBit(char &c,int i,int v){///存灯///
if(v){
c=c|(1<<i);
}
else{
c=c&~(1<<i);
}
}
void FlipBit(char &c,int i){///c的第i位翻转
c^=(1<<i);
}
void Output(int t,char Result[]){///输出结果字符
cout<<"PUZZLE #"<<t<<endl;
for(int i=0;i<5;i++){
for(int j=0;j<6;j++){
cout<<GetBit(Result[i],j);
if(j<5)
cout<<" ";
}
cout<<endl;
}
}
int main(){
int T;
cin>>T;
for(int t=1;t<=T;t++){
for(int i=0;i<5;i++){//输入
for(int j=0;j<6;j++){
int s;
cin>>s;
SetBit(oriLights[i],j,s);///存灯状态
}
}
for(int n=0;n<64;n++){///每行状态
int switchs=n;
memcpy(lights,oriLights,sizeof(oriLights));///字符复制
for(int i=0;i<5;i++){
Result[i]=switchs;///存开关
for(int j=0;j<6;j++){
if(GetBit(switchs,j)){///为1
if(j>0)
FlipBit(lights[i],j-1);///左
FlipBit(lights[i],j);//中
if(j<5)
FlipBit(lights[i],j+1);///右
}
}
if(i<4){
lights[i+1]^=switchs;//和下一行比较-反转
}
switchs=lights[i];///记录第i行的switches
}
if(lights[4]==0){///第四行为0
Output(t,Result);
break;
}
}
}
return 0;
}