#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <string>#include <map>#include <stack>#include <vector>#include <set>#include <queue>#pragma comment (linker,"/STACK:102400000,102400000")#define maxn 305#define MAXN 200005#define mod 1000000007#define INF 0x3f3f3f3f#define pi acos(-1.0)#define eps 1e-6typedef long long ll;using namespace std;int n,m,k,cnt,flag;double ans,tot;bool mp[maxn][maxn];bool vis[maxn][maxn];double val[maxn][maxn];int dx[]= {-1,1,0,0};int dy[]= {0,0,-1,1};char s[maxn];void show(){ int i,j,t; for(i=1; i<=3*n; i++) { for(j=1; j<=3*m; j++) { printf("%d",mp[i][j]); } printf("n"); }}void dfs(int x,int y){ int i,j,t,tx,ty; for(i=0; i<4; i++) { tx=x+dx[i]; ty=y+dy[i]; if(tx<0||tx>3*n+1||ty<0||ty>3*m+1||vis[tx][ty]||mp[tx][ty]) continue ; tot+=val[tx][ty]; vis[tx][ty]=1; dfs(tx,ty); }}void solve(){ int i,j,t; memset(vis,0,sizeof(vis)); vis[0][0]=1; dfs(0,0); k=ans=0; for(i=1; i<=3*n; i++) { for(j=1; j<=3*m; j++) { if(!vis[i][j]&&!mp[i][j]) { k++; vis[i][j]=1; tot=val[i][j]; dfs(i,j); ans=max(ans,tot); } } }}int main(){ int i,j,t,nx,ny,test=0; memset(val,0,sizeof(val)); for(i=1; i<=100; i++) { for(j=1; j<=100; j++) { nx=3*i-1,ny=3*j-1; mp[nx][ny]=1; mp[nx-1][ny-1]=1; mp[nx+1][ny+1]=1; mp[nx-1][ny+1]=1; mp[nx+1][ny-1]=1; } } for(i=1;i<=300;i++) { for(j=1;j<=300;j++) { if(!mp[i][j]) val[i][j]=0.5; } } while(scanf("%d%d",&m,&n),n||m) { memset(mp,0,sizeof(mp)); for(i=1; i<=n; i++) { scanf("%s",s); for(j=1; j<=m; j++) { nx=3*i-1,ny=3*j-1; mp[nx][ny]=1; if(s[j-1]=='\') { mp[nx-1][ny-1]=1; mp[nx+1][ny+1]=1; } else { mp[nx-1][ny+1]=1; mp[nx+1][ny-1]=1; } } } solve(); printf("Maze #%d:n",++test); if(k) printf("%d Cycles; the longest has length %d.n",k,int(ans)); else printf("There are no cycles.n"); printf("n"); } return 0;}