#include <bits/stdc++.h>
using namespace std ;
///CHECKING @Tanvir
#define ft first
#define sd second
#define pb push_back
#define all(x) x.begin(),x.end()
#define ll long long int
#define vi vector<int>
#define vii vector<pair<int,int> >
#define pii pair<int,int>
#define piii pair<int, pii>
#define mp make_pair
#define f_in(st) freopen(st,"r",stdin)
#define f_out(st) freopen(st,"w",stdout)
#define fr(i, a, b) for(int i=a; i<=b; i++)
#define fb(i, a, b) for(int i=a; i>=b; i--)
#define ASST(x, l, r) assert( x <= r && x >= l )
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define IO ios_base::sync_with_stdio(0);cin.tie(0); cout.tie(0)
int G[25][25];
int M[25][25];
bool vis[25][25];
int w;
int h;
int dfs(int x, int y)
{
cout<<"\n~~~~~~~~x="<<x<<"\ty="<<y<<"\n";
if(M[x][y]!= 0){
cout<<"\n#Value already x="<<x<<"\ty="<<y<<"\tM[x][y]="<<M[x][y]<<"\n";
return M[x][y];
}
vis[x][y]= true;
int a[4];
memset(a, 0, sizeof(a[0]));
if(x>0 && G[x-1][y]==1 && !vis[x-1][y]){
cout<<"\nGoing LEFT x="<<x<<"\ty="<<y<<"\n";
a[0]= dfs(x-1,y); ///bame
//vis[x-1][y]= true;
}
if(x<w-1 && G[x+1][y]==1 && !vis[x+1][y]){
cout<<"\nGoing RIGHT x="<<x<<"\ty="<<y<<"\n";
a[1]= dfs(x+1, y); ///dane
//vis[x+1][y]= true;
}
if(y>0 && G[x][y-1]==1 && !vis[x][y-1]){
cout<<"\nGoing UP x="<<x<<"\ty="<<y<<"\n";
a[2]= dfs(x, y-1); ///upore
//vis[x][y-1]= true;
}
if(y<h-1 && G[x][y+1]==1 && !vis[x][y+1]){
cout<<"\nGoing DOWN x="<<x<<"\ty="<<y<<"\n";
a[3]= dfs(x, y+1); ///niche
}
cout<<"\n#for x="<<x<<"\ty="<<y<<"\ta[0]="<<a[0]<<"\ta[1]="<<a[1]<<"\ta[2]="<<a[2]<<"\ta[3]="<<a[3]<<"\n";
M[x][y]= 1+a[1]+a[2]+a[3]+a[4];
cout<<"\nM[x][y]="<<M[x][y]<<"\n";
return M[x][y];
}
int main()
{
IO;
int t;
cin>>t;
for(int tc= 1; tc<=t; tc++){
///int w, h;
cin >> w>> h;
///memset(array, 0, sizeof(array[0][0]) * m * n);
memset(M, 0, sizeof(M[0][0])*w*h);
memset(vis, false, sizeof(vis[0][0])*w*h);
cout<<M[1][0]<<"\n";
int startx, starty;
for(int i=0; i<w; i++){
string s;
cin>>s;
for(int j=0; j<h; j++){
if(s[j]=='@'){
startx= i;
starty= j;
G[i][j]= 1;
}
else if(s[j]=='#'){
G[i][j]= -1;
}
else{
G[i][j]= 1;
}
}
}
dfs(startx, starty);
}
return 0;
}
/*********************************************
1
4 2
..
@.
.#
#.
********************************************/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQgOwovLy9DSEVDS0lORyBAVGFudmlyCiNkZWZpbmUgZnQgZmlyc3QKI2RlZmluZSBzZCBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLHguZW5kKCkKCiNkZWZpbmUgbGwgbG9uZyBsb25nIGludAojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgdmlpIHZlY3RvcjxwYWlyPGludCxpbnQ+ID4KI2RlZmluZSBwaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIHBpaWkgcGFpcjxpbnQsIHBpaT4KI2RlZmluZSBtcCBtYWtlX3BhaXIKCgojZGVmaW5lIGZfaW4oc3QpIGZyZW9wZW4oc3QsInIiLHN0ZGluKQojZGVmaW5lIGZfb3V0KHN0KSBmcmVvcGVuKHN0LCJ3IixzdGRvdXQpCgojZGVmaW5lIGZyKGksIGEsIGIpIGZvcihpbnQgaT1hOyBpPD1iOyBpKyspCiNkZWZpbmUgZmIoaSwgYSwgYikgZm9yKGludCBpPWE7IGk+PWI7IGktLSkKI2RlZmluZSBBU1NUKHgsIGwsIHIpIGFzc2VydCggeCA8PSByICYmIHggPj0gbCApCgojaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgoKI2RlZmluZSBJTyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7IGNvdXQudGllKDApCgoKaW50IEdbMjVdWzI1XTsKaW50IE1bMjVdWzI1XTsKYm9vbCB2aXNbMjVdWzI1XTsKaW50IHc7CmludCBoOwoKCmludCBkZnMoaW50IHgsIGludCB5KQp7CiAgICBjb3V0PDwiXG5+fn5+fn5+fng9Ijw8eDw8Ilx0eT0iPDx5PDwiXG4iOwogICAgaWYoTVt4XVt5XSE9IDApewogICAgICAgICAgICBjb3V0PDwiXG4jVmFsdWUgYWxyZWFkeSB4PSI8PHg8PCJcdHk9Ijw8eTw8Ilx0TVt4XVt5XT0iPDxNW3hdW3ldPDwiXG4iOwogICAgICAgICAgICByZXR1cm4gTVt4XVt5XTsKICAgIH0KICAgIHZpc1t4XVt5XT0gdHJ1ZTsgCgogICAgaW50IGFbNF07CiAgICBtZW1zZXQoYSwgMCwgc2l6ZW9mKGFbMF0pKTsKICAgIGlmKHg+MCAmJiBHW3gtMV1beV09PTEgJiYgIXZpc1t4LTFdW3ldKXsKICAgIAljb3V0PDwiXG5Hb2luZyBMRUZUIHg9Ijw8eDw8Ilx0eT0iPDx5PDwiXG4iOyAKICAgIAlhWzBdPSBkZnMoeC0xLHkpOyAvLy9iYW1lCiAgICAJLy92aXNbeC0xXVt5XT0gdHJ1ZTsgCiAgICAJCiAgICAJCiAgICB9IAogICAgaWYoeDx3LTEgJiYgR1t4KzFdW3ldPT0xICYmICF2aXNbeCsxXVt5XSl7CiAgICAJY291dDw8IlxuR29pbmcgUklHSFQgeD0iPDx4PDwiXHR5PSI8PHk8PCJcbiI7IAogICAgCWFbMV09IGRmcyh4KzEsIHkpOyAvLy9kYW5lCiAgICAJLy92aXNbeCsxXVt5XT0gdHJ1ZTsgCiAgICAJCiAgICB9IAogICAgaWYoeT4wICYmIEdbeF1beS0xXT09MSAmJiAhdmlzW3hdW3ktMV0pewogICAgCWNvdXQ8PCJcbkdvaW5nIFVQIHg9Ijw8eDw8Ilx0eT0iPDx5PDwiXG4iOyAKICAgIAlhWzJdPSBkZnMoeCwgeS0xKTsgLy8vdXBvcmUKICAgIAkvL3Zpc1t4XVt5LTFdPSB0cnVlOyAKICAgIH0gCiAgICBpZih5PGgtMSAmJiBHW3hdW3krMV09PTEgJiYgIXZpc1t4XVt5KzFdKXsKICAgIAljb3V0PDwiXG5Hb2luZyBET1dOIHg9Ijw8eDw8Ilx0eT0iPDx5PDwiXG4iOyAKICAgIAkKICAgIAlhWzNdPSBkZnMoeCwgeSsxKTsgLy8vbmljaGUKICAgIAkKICAgIH0KCiAgICBjb3V0PDwiXG4jZm9yIHg9Ijw8eDw8Ilx0eT0iPDx5PDwiXHRhWzBdPSI8PGFbMF08PCJcdGFbMV09Ijw8YVsxXTw8Ilx0YVsyXT0iPDxhWzJdPDwiXHRhWzNdPSI8PGFbM108PCJcbiI7CiAgICBNW3hdW3ldPSAxK2FbMV0rYVsyXSthWzNdK2FbNF07CiAgICBjb3V0PDwiXG5NW3hdW3ldPSI8PE1beF1beV08PCJcbiI7CgogICAgcmV0dXJuIE1beF1beV07Cgp9CgoKCmludCBtYWluKCkKewogICAgSU87CiAgICBpbnQgdDsKICAgIGNpbj4+dDsKICAgIGZvcihpbnQgdGM9IDE7IHRjPD10OyB0YysrKXsKICAgICAgICAvLy9pbnQgdywgaDsKICAgICAgICBjaW4gPj4gdz4+IGg7CiAgICAgICAgLy8vbWVtc2V0KGFycmF5LCAwLCBzaXplb2YoYXJyYXlbMF1bMF0pICogbSAqIG4pOwogICAgICAgIG1lbXNldChNLCAwLCBzaXplb2YoTVswXVswXSkqdypoKTsKICAgICAgICBtZW1zZXQodmlzLCBmYWxzZSwgc2l6ZW9mKHZpc1swXVswXSkqdypoKTsgCiAgICAgICAgY291dDw8TVsxXVswXTw8IlxuIjsKICAgICAgICBpbnQgc3RhcnR4LCBzdGFydHk7CiAgICAgICAgZm9yKGludCBpPTA7IGk8dzsgaSsrKXsKICAgICAgICAgICAgc3RyaW5nIHM7CiAgICAgICAgICAgIGNpbj4+czsKICAgICAgICAgICAgZm9yKGludCBqPTA7IGo8aDsgaisrKXsKICAgICAgICAgICAgICAgIGlmKHNbal09PSdAJyl7CiAgICAgICAgICAgICAgICAgICAgc3RhcnR4PSBpOwogICAgICAgICAgICAgICAgICAgIHN0YXJ0eT0gajsKICAgICAgICAgICAgICAgICAgICBHW2ldW2pdPSAxOwoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYoc1tqXT09JyMnKXsKICAgICAgICAgICAgICAgICAgICBHW2ldW2pdPSAtMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgR1tpXVtqXT0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZnMoc3RhcnR4LCBzdGFydHkpOwoKICAgIH0KCgogICAgcmV0dXJuIDA7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCjEKNCAyCi4uCkAuCi4jCiMuCgoKCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K