(DFS)
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=310;
char g[N][N];
int n;
int dx[]={-1,-1,-1,0,1,1,1,0},dy[]={-1,0,1,1,1,0,-1,-1};
int check(int sx,int sy){
int count=0;
for(int i=0;i<8;i++){
int a=sx+dx[i],b=sy+dy[i];
if(a>=0&&a<n&&b>=0&&b<n&&g[a][b]=='*')count++;
}
return count;
}
void work(int sx,int sy){
if(sx<0||sx>=n||sy<0||sy>=n||g[sx][sy]!='.')return;
g[sx][sy]=char('0'+check(sx,sy));
if(g[sx][sy]=='0'){
for(int i=0;i<8;i++){
int a=sx+dx[i],b=sy+dy[i];
work(a,b);
}
}
return;
}
int main(){
int T;
cin>>T;
int t=T;
while(T--){
cin>>n;
int res=0;
for(int i=0;i<n;i++){
cin>>g[i];
}
//先把附近没雷的先按
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(g[i][j]=='.'&&check(i,j)==0){
res++;
work(i,j);
}
//再逐个逐个按附近有雷的
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(g[i][j]=='.'){
res++;
work(i,j);
}
cout<<"Case #"<<t-T<<": "<<res<<endl;
}
return 0;
}