Problem: There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can't move on red tiles, he can move only on black tiles.

Write a program to count the number of black tiles which he can reach by repeating the moves described above.



Input

The input consists of multiple data sets. A data set starts with a line containing two positive integers W and H; W and H are the numbers of tiles in the x- and y- directions, respectively. W and H are not more than 20.

There are H more lines in the data set, each of which includes W characters. Each character represents the color of a tile as follows.

* '.' - a black tile
* '#' - a red tile
* '@' - a man on a black tile(appears exactly once in a data set)


The end of the input is indicated by a line consisting of two zeros.

Output

For each data set, your program should output a line which contains the number of tiles he can reach from the initial tile (including itself).

Examples

Input

6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
11 6
..#..#..#..
..#..#..#..
..#..#..###
..#..#..#@.
..#..#..#..
..#..#..#..
7 7
..#.#..
..#.#..
###.###
...@...
###.###
..#.#..
..#.#..
0 0


Output

45
59
6
13


Input

6 9
....#.
.....#
......
......
......
......
......
@...#
.#..#.
11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
11 6
..#..#..#..
..#..#..#..
..#..#..###
..#..#..#@.
..#..#..#..
..#..#..#..
7 7
..#.#..
..#.#..
.###
...@...
.###
..#.#..
..#.#..
0 0


Output

45
59
6
13

Solution (in JAVA):

Solution:
import java.util.Scanner;
class Main
{
	
	static int H,W,h,w;
	static int ans =0;
	static int  base[][];
	public static void main(String arg[])
	{
		Scanner in = new Scanner(System.in);
		for(;;)
		{
			ans=0;
			int W=in.nextInt();
			int H=in.nextInt();
			if((H|W)==0)
				return;
			base=new int [H][W];
			String str;
			for(int i=0;i<H;i++)
			{
				str=in.next();
				for(int j=0;j<W;j++)
				{
					if(str.charAt(j)=='#')
						base[i][j]=0;
					else if(str.charAt(j)=='.')
						base[i][j]=1;
					else if(str.charAt(j)=='@')
					{
						h=i;
						w=j;
						base[i][j]=1;
					}

				}
			}
			System.out.println(solve(h,w,H,W));
		}
	}
	
	public static int solve(int m, int n,int H,int W)
	{
		if((0<=m&&m<H)&&(0<=n&&n<W))
		{
			if(base[m][n]==0||base[m][n]==2)
				return 0;
			else if(base[m][n]==1)
			{
				ans++;
				base[m][n]=2;
				if(m-1>=0&&base[m-1][n]==1)
					solve(m-1,n,H,W);
				if(m+1<H&&base[m+1][n]==1)
					solve(m+1,n,H,W);
				if(n-1>=0&&base[m][n-1]==1)
					solve(m,n-1,H,W);
				if(n+1<W&&base[m][n+1]==1)
					solve(m,n+1,H,W);
			}
		}
		return ans;
	}
}