//题目大意:求相连的块数
//解题思路:使用广度优先搜索,搜索的次数即相连的块数
#include <iostream>
using namespace std;
#define arraysize 101
int dir[8][2] = {{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}}; //定义搜索的8个方向
typedef struct node
{
int x;
int y;
}node;
char map[arraysize][arraysize]; //记录搜索时的地图
int m,n;
node myqueue[arraysize*arraysize]; //搜索时的队列
void BFS(int i,int j)
{
int k;
int start = 0;
int top = 1;
myqueue[0].x = i;
myqueue[0].y = j;
map[i][j] = '*';
while(top!=start)
{
node frontnode = myqueue[start];
int sx,sy;
sx = frontnode.x;
sy = frontnode.y;
start++;
for(k=0;k<8;++k)
{
int temptx = sx+dir[k][0];
int tempty = sy+dir[k][1];
if(temptx>=0 && temptx <m && tempty>=0 && tempty <n && map[temptx][tempty]=='@')
{
myqueue[top].x = temptx;
myqueue[top].y = tempty;
map[temptx][tempty] = '*'; //此处进行修改
top++;
}
}
}
}
int main()
{
//freopen("1.txt","r",stdin);
int i,j;
while(cin>>m>>n)
{
if(m==0)
break;
for(i=0;i<m;++i)
{
for(j=0;j<n;++j)
{
cin>>map[i][j];
}
}
int count = 0;
for(i=0;i<m;++i)
{
for(j=0;j<n;++j)
{
if(map[i][j] == '@')
{
BFS(i,j);
count++; //广度搜索的次数即相连的块数
}
}
}
printf("%d\n",count);
}
return 0;
}