#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX 3000
using namespace std;
char g[51][51];
int m,n;
int fa[MAX];
int pipe[11][4]={{1,0,1,0},{1,0,0,1},{0,1,1,0},{0,1,0,1},{1,1,0,0},{0,0,1,1},{1,0,1,1},{1,1,1,0},{0,1,1,1},{1,1,0,1},{1,1,1,1}};
void init()
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
fa[i*n+j]=i*n+j;//i*n+j
}
}
}
int parent(int x)
{
if(fa[x]!=x)fa[x]=parent(fa[x]);
return fa[x];
}
void Merge(int i,int j)
{
if(i>0&&pipe[g[i-1][j]-'A'][1]&&pipe[g[i][j]-'A'][0])
{
int x=parent(fa[i*n+j]);
int y=parent(fa[(i-1)*n+j]);
if(y!=x)fa[y]=x;
}
if(j>0&&pipe[g[i][j-1]-'A'][3]&&pipe[g[i][j]-'A'][2])
{
int x=parent(fa[i*n+j]);
int y=parent(fa[i*n+j-1]);
if(y!=x)fa[y]=x;
}
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&m,&n)!=EOF&&(m!=-1&&n!=-1))
{
init();
for(int i=0;i<m;i++)
{
scanf("%s",g[i]);
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
Merge(i,j);
}
}
int res=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(fa[i*n+j]==i*n+j)res++;
}
}
printf("%d\n",res);
}
return 0;
}
WA的原因很low啊,竟然是数组的 m,n弄烦了, 是i*n+j