水题
//11237724 c00h00g 1562 Accepted 440K 0MS G++ 925B 2013-02-05 00:00:27
//一开始使用gets读的,不知道怎么滤过第一个回车,改成scanf就对了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char mat[105][105];
int vis[105][105];
int n,m;
int dir[8][2]={{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1},{1,0},{1,1}};
void dfs(int x,int y){
if(mat[x][y]=='@'&&vis[x][y]==0){
vis[x][y]=1;
for(int i=0;i<8;i++){
int a=x+dir[i][0];
int b=y+dir[i][1];
if(a>=0&&a<m&&b>=0&&b<n&&vis[a][b]==0&&mat[a][b]=='@')
dfs(a,b);
}
}
}
int main(){
while(scanf("%d%d",&m,&n)!=EOF){
if(m==0) break;
for(int i=0;i<m;i++)
scanf("%s",mat[i]);
memset(vis,0,sizeof(vis));
int res=0;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(vis[i][j]==0&&mat[i][j]=='@'){
dfs(i,j);
res++;
}
printf("%d\n",res);
}
return 0;
}