#include <stdio.h>
int T;
int N;
int bomb=1;
int num=-1;
int map[50][50];
int mark[50][50]={0};
int dir[3][2]={{-1,1},{0,1},{1,1}};
int head=0,tail=0;
int queue[10000000000]={0};
int s[100];
int Step=0;
void init()
{
for(int i=0;i<5;i++)
{
for(int j=1;j<=N;j++)
{
map[i][j]=0;
}
}
}
void bomb1(int y)
{
for(int i=0;i<5;i++)
{
for(int j=y;j<=y+4;j++)
{
if(map[i][j]==2)
{
mark[i][j]=1;
map[i][j]=0;
}
}
}
}
void rebomb(int y)
{
for(int i=0;i<5;i++)
{
for(int j=y;j<=y+5;j++)
{
if(mark[i][j])
{
mark[i][j]=0;
map[i][j]=2;
}
}
}
}
void dfs(int x,int y)
{
int x1,y1;
if(y==N)
{
queue[tail++]=num;
return;
}
for(int i=0;i<3;i++)
{
x1=x+dir[i][0];
y1=y+dir[i][1];
if(x1>4||x1<0) continue;
if(map[x1][y1]==0)
{
dfs(x1,y1);
}
if(map[x1][y1]==1)
{
num++;
dfs(x1,y1);
num--;
}
if(map[x1][y1]==2)
{
if(bomb)
{
bomb1(y1);
bomb=0;
dfs(x1,y1);
rebomb(y1);
bomb=1;
}
num--;
dfs(x1,y1);
num++;
}
}
}
int main()
{
int l;
scanf("%d",&T);
scanf("%d",&N);
for(int i=0;i<T;i++)
{
scanf("%d",&l);
printf("\n");
for(int j=N;j>0;j--)
{
for(int k=0;k<5;k++)
{
scanf("%d",&map[k][j]);
}
}
printf("\n");
dfs(2,0);
while(head<tail)
{
num=queue[head]>num?queue[head]:num;
head++;
}
if(num>0) num++;
s[i]=num;
init();
num=-1;
}
for(int t=0;t<T;t++)
{
printf("#%d:%d\n",t+1,s[t]);
}
return 0;
}
#include <stdio.h>
int T;
int N;
int bomb=1;
int num=-1;
int map[50][50];
int mark[50][50]={0};
int dir[3][2]={{-1,1},{0,1},{1,1}};
int head=0,tail=0;
int queue[10000000000]={0};
int s[100];
int Step=0;
void init()
{
for(int i=0;i<5;i++)
{
for(int j=1;j<=N;j++)
{
map[i][j]=0;
}
}
}
void bomb1(int y)
{
for(int i=0;i<5;i++)
{
for(int j=y;j<=y+4;j++)
{
if(map[i][j]==2)
{
mark[i][j]=1;
map[i][j]=0;
}
}
}
}
void rebomb(int y)
{
for(int i=0;i<5;i++)
{
for(int j=y;j<=y+5;j++)
{
if(mark[i][j])
{
mark[i][j]=0;
map[i][j]=2;
}
}
}
}
void dfs(int x,int y)
{
int x1,y1;
if(y==N)
{
queue[tail++]=num;
return;
}
for(int i=0;i<3;i++)
{
x1=x+dir[i][0];
y1=y+dir[i][1];
if(x1>4||x1<0) continue;
if(map[x1][y1]==0)
{
dfs(x1,y1);
}
if(map[x1][y1]==1)
{
num++;
dfs(x1,y1);
num--;
}
if(map[x1][y1]==2)
{
if(bomb)
{
bomb1(y1);
bomb=0;
dfs(x1,y1);
rebomb(y1);
bomb=1;
}
num--;
dfs(x1,y1);
num++;
}
}
}
int main()
{
int l;
scanf("%d",&T);
scanf("%d",&N);
for(int i=0;i<T;i++)
{
scanf("%d",&l);
printf("\n");
for(int j=N;j>0;j--)
{
for(int k=0;k<5;k++)
{
scanf("%d",&map[k][j]);
}
}
printf("\n");
dfs(2,0);
while(head<tail)
{
num=queue[head]>num?queue[head]:num;
head++;
}
if(num>0) num++;
s[i]=num;
init();
num=-1;
}
for(int t=0;t<T;t++)
{
printf("#%d:%d\n",t+1,s[t]);
}
return 0;
}