#include <bits/stdc++.h>
using namespace std;
const int N = 300;
const int dx[] = {-1,1,0,0};
const int dy[] = {0,0,-1,1};
int r,c;
char in[N][N];
int num[N][N];
queue<pair<int,int> >q;
inline bool check(int x, int y) {
if (1 <= x && x <= r && 1 <= y && y <= c) return 1;
else return 0;
}
inline void pre() {
while (!q.empty()) {
pair<int, int> temp = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int nx = temp.first + dx[i];
int ny = temp.second + dy[i];
if (in[nx][ny] == '0' && check(nx, ny) && num[nx][ny] == 0) {
num[nx][ny] = num[temp.first][temp.second] + 1;
q.push(make_pair(nx, ny));
}
}
}
}
int main() {
int t, k = 0;
scanf("%d",&t);
while (t--) {
++k;
scanf("%d%d",&r,&c);
memset(num, 0, sizeof num);
memset(in, 0, sizeof in);
while (!q.empty()) q.pop();
for (int i = 1; i <= r; i++) scanf("%s",in[i]+1);
for (int i = 1; i <= r; i++) {
for (int j = 1; j <= c; j++) {
if (in[i][j] == '1') {
num[i][j] = 0;
q.push(make_pair(i, j));
}
}
}
pre();
int ans = INT_MAX, tot = 0;
for (int i = 1; i <= r; i++) {
for (int j = 1; j <= c; j++) {
if (in[i][j] == '0') {
tot++;
int temp = -1;
for (int ii = 1; ii <= r; ii++) {
for (int jj = 1; jj <= c; jj++) {
if (ii == i && jj == j) continue;
if (in[ii][jj] == '0') {
temp = max(temp, min(num[ii][jj],abs(ii-i) + abs(jj-j)));
}
}
}
//printf("%d\n", temp);
ans = min(ans, temp);
}
}
}
if (tot == 0) ans = 0;
printf("Case #%d: %d\n",k, ans);
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCAgTiA9IDMwMDsKY29uc3QgaW50IGR4W10gPSB7LTEsMSwwLDB9Owpjb25zdCBpbnQgZHlbXSA9IHswLDAsLTEsMX07CgppbnQgcixjOwpjaGFyIGluW05dW05dOwppbnQgbnVtW05dW05dOwpxdWV1ZTxwYWlyPGludCxpbnQ+ID5xOwoKaW5saW5lIGJvb2wgY2hlY2soaW50IHgsIGludCB5KSB7CglpZiAoMSA8PSB4ICYmIHggPD0gciAmJiAxIDw9IHkgJiYgeSA8PSBjKSByZXR1cm4gMTsKCWVsc2UgcmV0dXJuIDA7Cn0KCmlubGluZSB2b2lkIHByZSgpIHsKCXdoaWxlICghcS5lbXB0eSgpKSB7CgkJcGFpcjxpbnQsIGludD4gdGVtcCA9IHEuZnJvbnQoKTsKCQlxLnBvcCgpOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CgkJCWludCBueCA9IHRlbXAuZmlyc3QgKyBkeFtpXTsKCQkJaW50IG55ID0gdGVtcC5zZWNvbmQgKyBkeVtpXTsKCQkJaWYgKGluW254XVtueV0gPT0gJzAnICYmIGNoZWNrKG54LCBueSkgJiYgbnVtW254XVtueV0gPT0gMCkgewoJCQkJbnVtW254XVtueV0gPSBudW1bdGVtcC5maXJzdF1bdGVtcC5zZWNvbmRdICsgMTsKCQkJCXEucHVzaChtYWtlX3BhaXIobngsIG55KSk7CgkJCX0KCQl9Cgl9Cn0KCmludCBtYWluKCkgewoJaW50IHQsIGsgPSAwOwoJc2NhbmYoIiVkIiwmdCk7Cgl3aGlsZSAodC0tKSB7CgkJKytrOwoJCXNjYW5mKCIlZCVkIiwmciwmYyk7CgkJbWVtc2V0KG51bSwgMCwgc2l6ZW9mIG51bSk7CgkJbWVtc2V0KGluLCAwLCBzaXplb2YgaW4pOwoJCXdoaWxlICghcS5lbXB0eSgpKSBxLnBvcCgpOwoJCWZvciAoaW50IGkgPSAxOyBpIDw9IHI7IGkrKykgc2NhbmYoIiVzIixpbltpXSsxKTsKCQlmb3IgKGludCBpID0gMTsgaSA8PSByOyBpKyspIHsKCQkJZm9yIChpbnQgaiA9IDE7IGogPD0gYzsgaisrKSB7CgkJCQlpZiAoaW5baV1bal0gPT0gJzEnKSB7CgkJCQkJbnVtW2ldW2pdID0gMDsKCQkJCQlxLnB1c2gobWFrZV9wYWlyKGksIGopKTsKCQkJCX0KCQkJfQoJCX0KCQlwcmUoKTsKCQlpbnQgYW5zID0gSU5UX01BWCwgdG90ID0gMDsKCQlmb3IgKGludCBpID0gMTsgaSA8PSByOyBpKyspIHsKCQkJZm9yIChpbnQgaiA9IDE7IGogPD0gYzsgaisrKSB7CgkJCQlpZiAoaW5baV1bal0gPT0gJzAnKSB7CgkJCQkJdG90Kys7CgkJCQkJaW50IHRlbXAgPSAtMTsKCQkJCQlmb3IgKGludCBpaSA9IDE7IGlpIDw9IHI7IGlpKyspIHsKCQkJCQkJZm9yIChpbnQgamogPSAxOyBqaiA8PSBjOyBqaisrKSB7CgkJCQkJCQlpZiAoaWkgPT0gaSAmJiBqaiA9PSBqKSBjb250aW51ZTsKCQkJCQkJCWlmIChpbltpaV1bampdID09ICcwJykgewoJCQkJCQkJCXRlbXAgPSBtYXgodGVtcCwgbWluKG51bVtpaV1bampdLGFicyhpaS1pKSArIGFicyhqai1qKSkpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCS8vcHJpbnRmKCIlZFxuIiwgdGVtcCk7CgkJCQkJYW5zID0gbWluKGFucywgdGVtcCk7CgkJCQl9CgkJCX0KCQl9CgkJaWYgKHRvdCA9PSAwKSBhbnMgPSAwOwoJCXByaW50ZigiQ2FzZSAjJWQ6ICVkXG4iLGssIGFucyk7Cgl9CglyZXR1cm4gMDsKfQ==