/*判环的个数 和最长路径
这个题需要将输入的 / \ 转化 ‘\’ 为200 ‘/’为 001
020 010
002 100
*/
#include<cstdio>
#include<cstring>int map[300][300],vis[300][300],n,m,ok,max,count;
int d[6][4] = {{0,0,1,-1},{1,-1,0,0}};
int dfs(int x,int y)
{
if(x<=0||y<=0||x>n||y>m)
{
ok = 1;
return 0;
}
if(map[x][y]||vis[x][y])
return 0;
count++;
vis[x][y]=1;
//printf("%d...%d %d..%d\n",count,x,y,ok);
for(int i = 0; i < 4; i++)
{
//vis[x+d[0][i]][y+d[1][i]]=1;
dfs(x+d[0][i],y+d[1][i]);
//vis[x+d[0][i]][y+d[1][i]]=0;
}
return 0;
}
int main()
{
char c;
int kcase = 0;
for(kcase=0;; kcase++)
{
scanf("%d %d",&m,&n);
getchar();
if(!m&&!n) break;
memset(map,0,sizeof(map));
memset(vis,0,sizeof(map));
for(int i = 1; i <= 3*n; i+=3)
{
for(int j = 1; j <= 3*m; j+=3)
{
scanf("%c",&c);
if(c=='\\')
{
map[i][j] = map[i+1][j+1] = map[i+2][j+2] = 2;
}
else
map[i][j+2] = map[i+1][j+1] = map[i+2][j] = 1;
}
getchar();
}
n *= 3;
m *= 3;
//for(int i=0;i<= n; i++)
//for(int j=0;j<=m;j++)
//printf("%d%c",map[i][j],j==m?'\n':' ');
max = -1;
int num=0;
ok = 0;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
if(!vis[i][j]&&!map[i][j])
{
count=0;
ok=0;
dfs(i,j);
if(!ok)
{
num++;
if(max < count)
max = count;
}
}
printf("Maze #%d:\n",kcase+1);
if(num==0)
printf("There are no cycles.\n");
else
printf("%d Cycles; the longest has length %d.\n",num,max/3);
printf("\n");
}
return 0;
}