#include <stdio.h>
#include <stdlib.h>
#include<queue>
#include<algorithm>
using namespace std;
struct Node
{
int x,y;
int rt;
};
Node node[200];
int n,m;
int cnt,gcnt,ans,ok,temp;
char mat[12][12];
int vis[12][12];
int dir[4][2]={1,0,-1,0,0,1,0,-1};
bool fit(Node a)
{
if(a.x<0||a.x>=n||a.y<0||a.y>=m||vis[a.x][a.y]==1) return false;
if(mat[a.x][a.y]=='.') return false;
return true;
}
void bfs(int s1,int s2)
{
queue<Node> q;
Node now,next;
now.x=node[s1].x;
now.y=node[s1].y;
now.rt=0;
vis[now.x][now.y]=1;
q.push(now);
now.x=node[s2].x;
now.y=node[s2].y;
now.rt=0;
vis[now.x][now.y]=1;
q.push(now);
while(!q.empty())
{
now=q.front();
q.pop();
for(int i=0;i<4;i++)
{
next.x=now.x+dir[i][0];
next.y=now.y+dir[i][1];
if(fit(next))
{
//printf("%d %d\n",next.x,next.y);
next.rt=now.rt+1;
vis[next.x][next.y]=1;
if(temp<next.rt) temp=next.rt;
q.push(next);
}
}
}
}
int main()
{
int t;
int i,j,k,l;
int cas=1;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
gcnt=0;
ans=100000;
ok=0;
for(i=0;i<n;i++)
{
scanf("%s",mat[i]);
for(j=0;j<m;j++)
{
if(mat[i][j]=='#')
{
node[gcnt].x=i;
node[gcnt++].y=j;
}
}
}
// printf("%d\n",gcnt);
for(i=0;i<gcnt;i++)
{
for(j=i;j<gcnt;j++)
{
temp=0;
memset(vis,0,sizeof(vis));
bfs(i,j);
if(temp<ans)
{
int flag=0;
for(k=0;k<n;k++)
{
for(l=0;l<m;l++)
{
if(vis[k][l]==1)
flag++;
}
}
//printf("%d %d\n",flag,gcnt);
if(flag==gcnt)
{
ans=temp;
ok=1;
}
}
}
}
if(ok==0) ans=-1;
if(gcnt==2) ans=0;
printf("Case %d: %d\n",cas++,ans);
}
return 0;
}