1 /*
2 dfs 从一个点出发最多能走多少步
3 用bfs较为麻烦
4 */
5 #include<stdio.h>
6 #include<string.h>
7 #include<stdlib.h>
8 #include<algorithm>
9 #include<iostream>
10 #include<queue>
11 //#include<map>
12 #include<math.h>
13 using namespace std;
14 typedef long long ll;
15 //typedef __int64 int64;
16 const int maxn = 25;
17 const int inf = 0x7fffffff;
18 const int pi=acos(-1.0);
19 struct node{
20 int x,y;
21 };
22
23 char mat[ maxn ][ maxn ];
24 int vis[ maxn ][ maxn ];
25 const int dx[]={0,0,1,-1};
26 const int dy[]={1,-1,0,0};
27 int ans;
28
29 void dfs( int x,int y,int n,int m ){
30 ans++; //if( sum>ans ) {ans=sum;}
31 for( int k=0;k<4;k++ ){
32 int tx,ty;
33 tx=x+dx[ k ],ty=y+dy[ k ];
34 if( tx<0||tx>=n||ty<0||ty>=m ) continue;
35 if( mat[ tx ][ ty ]=='#'||vis[ tx ][ ty ]==1 ) continue;
36 //printf("tx:%d ty:%d sum:%d \n",tx,ty,sum);
37 vis[ tx ][ ty ]=1;
38 dfs( tx,ty,n,m );
39 //vis[ tx ][ ty ]=0;
40 }
41 return ;
42 }
43
44 int main(){
45 int n,m;
46 while( scanf("%d%d",&m,&n)==2 ,n+m ){
47 for( int i=0;i<n;i++ ) scanf("%s",mat[ i ]);
48 node s;
49 memset( vis,0,sizeof(vis) );
50 for( int i=0;i<n;i++ )
51 for( int j=0;j<m;j++ )
52 if( mat[ i ][ j ]=='@') {
53 s.x=i;
54 s.y=j;
55 break;
56 }
57 ans=0;
58 vis[ s.x ][ s.y ]=1;
59 dfs( s.x,s.y,n,m );
60 printf("%d\n",ans);
61 }
62 return 0;
63 }