#include<bits/stdc++.h>
#define ff first
#define ss second
#define mp make_pair
#define mxN 1000000+100
using namespace std;
char a[55][55];
int dis[55][55];
int n,m;
bool vis[55][55];
int fx[] = {1,1,1,-1,-1,-1,0,0};
int fy[] = {1,-1,0,1,-1,0,1,-1};
int bfs(int x,int y){
memset(vis,0,sizeof(vis));
queue<pair<int,int>>q;
q.push(mp(x,y));
char c = 'A';
int mx = 0;
dis[x][y] = 1;
while(!q.empty()){
int u = q.front().ff;
int v = q.front().ss;
q.pop();
c++;
for(int i = 0; i < 8; i++){
int xx = u + fx[i];
int yy = v + fy[i];
if(a[xx][yy] == (a[u][v]+1) && xx >= 0 && yy >= 0 && xx < n && yy < m && vis[xx][yy] == 0){
q.push(mp(xx,yy));
vis[xx][yy] = 1;
dis[xx][yy] = dis[u][v] + 1;
c = a[u][v] + 1;
mx = max(mx,dis[xx][yy]);
}
}
}
return mx;
}
void solve()
{
int cas = 0;
while(cin >> n >> m){
if(n == 0 || m == 0)break;
printf("Case %d: ", ++cas);
int ans = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; ++j){
cin >> a[i][j];
}
}
for(int i = 0; i < n; i++){
for(int j = 0; j < m; ++j){
if(a[i][j] == 'A'){
ans = max(ans,bfs(i,j));
}
}
}
printf("%d\n", ans);
}
}
int main()
{
//freopen("inp.txt","r",stdin);
//freopen("out.txt","w",stdout);
int t = 1;
//scanf("%d",&t);
while(t--)solve();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBmZiBmaXJzdAojZGVmaW5lIHNzIHNlY29uZAojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIG14TiAxMDAwMDAwKzEwMAp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjaGFyIGFbNTVdWzU1XTsKaW50IGRpc1s1NV1bNTVdOwppbnQgbixtOwpib29sIHZpc1s1NV1bNTVdOwppbnQgZnhbXSA9IHsxLDEsMSwtMSwtMSwtMSwwLDB9OwppbnQgZnlbXSA9IHsxLC0xLDAsMSwtMSwwLDEsLTF9OwppbnQgYmZzKGludCB4LGludCB5KXsKCW1lbXNldCh2aXMsMCxzaXplb2YodmlzKSk7CglxdWV1ZTxwYWlyPGludCxpbnQ+PnE7CglxLnB1c2gobXAoeCx5KSk7CgljaGFyIGMgPSAnQSc7CglpbnQgbXggPSAwOwoJZGlzW3hdW3ldID0gMTsKCXdoaWxlKCFxLmVtcHR5KCkpewoJCWludCB1ID0gcS5mcm9udCgpLmZmOwoJCWludCB2ID0gcS5mcm9udCgpLnNzOwoJCXEucG9wKCk7CgkJYysrOwoJCWZvcihpbnQgaSA9IDA7IGkgPCA4OyBpKyspewoJCQlpbnQgeHggPSB1ICsgZnhbaV07CgkJCWludCB5eSA9IHYgKyBmeVtpXTsKCQkJaWYoYVt4eF1beXldID09IChhW3VdW3ZdKzEpICYmIHh4ID49IDAgJiYgeXkgPj0gMCAmJiB4eCA8IG4gJiYgeXkgPCBtICYmIHZpc1t4eF1beXldID09IDApewoJCQkJcS5wdXNoKG1wKHh4LHl5KSk7CgkJCQl2aXNbeHhdW3l5XSA9IDE7CgkJCQlkaXNbeHhdW3l5XSA9IGRpc1t1XVt2XSArIDE7CgkJCQljID0gYVt1XVt2XSArIDE7CgkJCQlteCA9IG1heChteCxkaXNbeHhdW3l5XSk7CgkJCX0KCQl9Cgl9CglyZXR1cm4gbXg7Cn0KCnZvaWQgc29sdmUoKQp7CglpbnQgY2FzID0gMDsKCXdoaWxlKGNpbiA+PiBuID4+IG0pewoJCWlmKG4gPT0gMCB8fCBtID09IDApYnJlYWs7CgkJcHJpbnRmKCJDYXNlICVkOiAiLCArK2Nhcyk7CgkJaW50IGFucyA9IDA7CgkJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CgkJCWZvcihpbnQgaiA9IDA7IGogPCBtOyArK2opewoJCQkJY2luID4+IGFbaV1bal07CgkJCX0KCQl9CgkJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CgkJCWZvcihpbnQgaiA9IDA7IGogPCBtOyArK2opewoJCQkJaWYoYVtpXVtqXSA9PSAnQScpewoJCQkJCWFucyA9IG1heChhbnMsYmZzKGksaikpOwoJCQkJfQoJCQl9CgkJfQoJCXByaW50ZigiJWRcbiIsIGFucyk7Cgl9Cn0KaW50IG1haW4oKQp7CgkvL2ZyZW9wZW4oImlucC50eHQiLCJyIixzdGRpbik7CgkvL2ZyZW9wZW4oIm91dC50eHQiLCJ3IixzdGRvdXQpOwoJaW50IHQgPSAxOwoJLy9zY2FuZigiJWQiLCZ0KTsKCXdoaWxlKHQtLSlzb2x2ZSgpOwoKCXJldHVybiAwOwp9