/*
GIVES WA
*/
#include <bits/stdc++.h>
using namespace std;
#define fastio \
ios_base::sync_with_stdio(0); \
cin.tie(0); \
cout.tie(0)
typedef long long ll;
typedef pair<ll, ll> pll;
const ll MOD = 1000000007;
const ll INF = 1e18;
const ll MAX_SIZE = 55;
// 8 directions
const ll rows[] = {1, -1, 0, 0, 1, -1, 1, -1};
const ll cols[] = {0, 0, 1, -1, 1, -1, -1, 1};
char arr[MAX_SIZE][MAX_SIZE];
ll dp[MAX_SIZE][MAX_SIZE];
ll N, M;
bool isValid(ll i, ll j)
{
return ((i >= 1 and i <= N) and (j >= 1 and j <= M));
}
int main()
{
fastio;
//freopen('input.txt','r',stdin);
//freopen('output.txt','w',stdout);
ll cnt = 0;
while (true)
{
cnt++;
cin >> N >> M;
if (!N and !M)
break;
ll longest = 0;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= M; j++)
{
dp[i][j] = 0;
cin >> arr[i][j];
if (arr[i][j] == 'A')
dp[i][j] = 1;
}
for (char ch = 'A'; ch <= 'Z'; ch++)
{
for (int i = 1; i <= N; i++)
for (int j = 1; j <= M; j++)
{
if (arr[i][j] != ch)
continue;
for (int k = 0; k < 8; k++)
{
ll newX = i + rows[k];
ll newY = j + cols[k];
if (isValid(newX, newY) and (arr[newX][newY] == (ch - 1)))
{
dp[i][j] = max(dp[newX][newY] + 1, dp[i][j]);
}
longest = max(longest, dp[i][j]);
}
}
}
cout << "Case " << cnt << ": " << longest << endl;
}
return 0;
}
// END OF SOURCE CODE
LyoKR0lWRVMgV0EKKi8KI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGZhc3RpbyAgICAgICAgICAgICAgICAgICAgXAogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgXAogICAgY2luLnRpZSgwKTsgICAgICAgICAgICAgICAgICAgXAogICAgY291dC50aWUoMCkKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8bGwsIGxsPiBwbGw7CmNvbnN0IGxsIE1PRCA9IDEwMDAwMDAwMDc7CmNvbnN0IGxsIElORiA9IDFlMTg7CmNvbnN0IGxsIE1BWF9TSVpFID0gNTU7CgovLyA4IGRpcmVjdGlvbnMKY29uc3QgbGwgcm93c1tdID0gezEsIC0xLCAwLCAwLCAxLCAtMSwgMSwgLTF9Owpjb25zdCBsbCBjb2xzW10gPSB7MCwgMCwgMSwgLTEsIDEsIC0xLCAtMSwgMX07CgpjaGFyIGFycltNQVhfU0laRV1bTUFYX1NJWkVdOwpsbCBkcFtNQVhfU0laRV1bTUFYX1NJWkVdOwpsbCBOLCBNOwoKYm9vbCBpc1ZhbGlkKGxsIGksIGxsIGopCnsKICAgIHJldHVybiAoKGkgPj0gMSBhbmQgaSA8PSBOKSBhbmQgKGogPj0gMSBhbmQgaiA8PSBNKSk7Cn0KCmludCBtYWluKCkKewogICAgZmFzdGlvOwogICAgLy9mcmVvcGVuKCdpbnB1dC50eHQnLCdyJyxzdGRpbik7CiAgICAvL2ZyZW9wZW4oJ291dHB1dC50eHQnLCd3JyxzdGRvdXQpOwogICAgbGwgY250ID0gMDsKICAgIHdoaWxlICh0cnVlKQogICAgewogICAgICAgIGNudCsrOwogICAgICAgIGNpbiA+PiBOID4+IE07CiAgICAgICAgaWYgKCFOIGFuZCAhTSkKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGxsIGxvbmdlc3QgPSAwOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IE47IGkrKykKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gTTsgaisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IDA7CiAgICAgICAgICAgICAgICBjaW4gPj4gYXJyW2ldW2pdOwoKICAgICAgICAgICAgICAgIGlmIChhcnJbaV1bal0gPT0gJ0EnKQogICAgICAgICAgICAgICAgICAgIGRwW2ldW2pdID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICBmb3IgKGNoYXIgY2ggPSAnQSc7IGNoIDw9ICdaJzsgY2grKykKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IE47IGkrKykKICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IE07IGorKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoYXJyW2ldW2pdICE9IGNoKQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBsbCBuZXdYID0gaSArIHJvd3Nba107CiAgICAgICAgICAgICAgICAgICAgICAgIGxsIG5ld1kgPSBqICsgY29sc1trXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQobmV3WCwgbmV3WSkgYW5kIChhcnJbbmV3WF1bbmV3WV0gPT0gKGNoIC0gMSkpKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IG1heChkcFtuZXdYXVtuZXdZXSArIDEsIGRwW2ldW2pdKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBsb25nZXN0ID0gbWF4KGxvbmdlc3QsIGRwW2ldW2pdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBjb3V0IDw8ICJDYXNlICIgPDwgY250IDw8ICI6ICIgPDwgbG9uZ2VzdCA8PCBlbmRsOwogICAgfQoKICAgIHJldHVybiAwOwp9Ci8vIEVORCBPRiBTT1VSQ0UgQ09ERQ==