#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
#define fastio ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define MAX 100050
#define ll long long
#define ld long double
#define lli long long int
#define pb emplace_back
#define INF 1000000000000
#define mod 1000000007
// trignometric function always give value in Radians only
#define PI acos(-1) //3.1415926535897932384626433832795028
#define dsin(degree) sin(degree*(PI/180.0))
#define dcos(degree) cos(degree*(PI/180.0))
#define dtan(degree) tan(degree*(PI/180.0))
#define rsin(radian) sin(radian)
#define rcos(radian) cos(radian)
#define rtan(radian) tan(radian)
#define loop(i,n) for (lli i = 0; i < n; i++)
#define loopitr(xt,vec) for (auto xt : vec)
#define FOR(i,a,b) for (lli i = a; i < b; i+=1)
#define loop_rev(i,n) for (lli i = n-1; i >= 0; i--)
#define FOR_REV(i,a,b) for (lli i = a; i >= b; i--)
#define itr :: iterator it
#define WL(t) while(t --)
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define sz(x) int(x.size())
#define F first
#define S second
#define mii map<lli,lli>
#define vi vector<lli>
#define vvi vector<vector<lli>>
#define vbool vector<bool>
#define seti set<lli>
#define pii pair<lli,lli>
#define pcc pair<char , char>
#define gcd(a,b) __gcd((a),(b))
#define lcm(a,b) (a/gcd(a,b))*b
#define abs(x) ((x < 0)?-(x):x)
#define endl '\n'
template <typename T>
void print(T x){cout<<x<<endl;}
template <typename T1, typename T2>
void print2(T1 x,T2 y){cout<<x<<" "<<y<<endl;}
template <typename T1, typename T2,typename T3>
void print3(T1 x, T2 y,T3 z){cout<<x<<" "<<y<<" "<<z<<endl;}
#define scanarr(a,n) for(lli i=0;i<n;i++) cin>>a[i];
#define scanvector(a,n) for(lli i=0;i<n;i++){ lli x ; cin>>x; a.pb(x);}
#define printarr(a,n) for(lli i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl;
#define printvector(vec) for(auto xt : vec) cout<<xt<<" "; cout<<"\n";
#define FD(N) fixed<<setprecision(N)
#define deb(x) cout<<#x<<" "<<x<<endl;
char input_grid[51][51];
bool visited[51][51];
lli h,w;
lli next_x[8]={0,0,1,-1,1,-1,-1,1};
lli next_y[8]={-1,1,0,0,-1,1,-1,1};
void dfs(lli x,lli y,lli &count){
//getting current character
char currChar = input_grid[x][y];
//marking it as visited and incrementing count
visited[x][y]=true; count++;
//checking if end of alphabets reached
if(currChar=='Z') return;
char nextChar = currChar+1;
//performing dfs
for(lli i=0;i<8;i++){
lli dx=x+next_x[i];
lli dy=y+next_y[i];
//check if valid position
if((dx>=1 && dx<=h) && (dy>=1 && dy<=w)){
//if not visited and nextChar then call dfs
if(!visited[dx][dy] && input_grid[dx][dy]==nextChar)
dfs(dx,dy,count);
}
}
}
lli solve(){
//taking input_grid and resetting visited
for(int i=1;i<=h;i++){
for(int j=1;j<=w;j++){
cin>>input_grid[i][j];
visited[i][j]=false;
}
}
lli max_answer = 0;
//traversing through input,finding A and then calling dfs if not visited
for(int i=1;i<=h;i++){
for(int j=1;j<=w;j++){
if(input_grid[i][j]=='A' && !visited[i][j]){
lli count=0;
dfs(i,j,count);
max_answer = max(max_answer,count);
}
}
}
return max_answer;
}
int main(){
lli t=1;
cin>>h>>w;
while(h!=0 && w!=0){
lli answer = solve();
cout<<"Case "<<t++<<": "<<answer<<endl;
cin>>h>>w;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGU8c3RkaW8uaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZmFzdGlvIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiNkZWZpbmUgTUFYIDEwMDA1MAoKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIGxsaSBsb25nIGxvbmcgaW50CgojZGVmaW5lIHBiIGVtcGxhY2VfYmFjawojZGVmaW5lIElORiAxMDAwMDAwMDAwMDAwCgojZGVmaW5lIG1vZCAxMDAwMDAwMDA3CgovLyB0cmlnbm9tZXRyaWMgZnVuY3Rpb24gYWx3YXlzIGdpdmUgdmFsdWUgaW4gUmFkaWFucyBvbmx5CiNkZWZpbmUgUEkgYWNvcygtMSkgLy8zLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUwMjgKI2RlZmluZSBkc2luKGRlZ3JlZSkgc2luKGRlZ3JlZSooUEkvMTgwLjApKQojZGVmaW5lIGRjb3MoZGVncmVlKSBjb3MoZGVncmVlKihQSS8xODAuMCkpCiNkZWZpbmUgZHRhbihkZWdyZWUpIHRhbihkZWdyZWUqKFBJLzE4MC4wKSkKCiNkZWZpbmUgcnNpbihyYWRpYW4pIHNpbihyYWRpYW4pCiNkZWZpbmUgcmNvcyhyYWRpYW4pIGNvcyhyYWRpYW4pCiNkZWZpbmUgcnRhbihyYWRpYW4pIHRhbihyYWRpYW4pCgojZGVmaW5lIGxvb3AoaSxuKSBmb3IgKGxsaSBpID0gMDsgaSA8IG47IGkrKykKI2RlZmluZSBsb29waXRyKHh0LHZlYykgZm9yIChhdXRvIHh0IDogdmVjKQojZGVmaW5lIEZPUihpLGEsYikgZm9yIChsbGkgaSA9IGE7IGkgPCBiOyBpKz0xKQojZGVmaW5lIGxvb3BfcmV2KGksbikgZm9yIChsbGkgaSA9IG4tMTsgaSA+PSAwOyBpLS0pCiNkZWZpbmUgRk9SX1JFVihpLGEsYikgZm9yIChsbGkgaSA9IGE7IGkgPj0gYjsgaS0tKQojZGVmaW5lIGl0ciA6OiBpdGVyYXRvciBpdAojZGVmaW5lIFdMKHQpIHdoaWxlKHQgLS0pCgojZGVmaW5lIGFsbCh2KSB2LmJlZ2luKCksdi5lbmQoKQojZGVmaW5lIHJhbGwodikgdi5yYmVnaW4oKSx2LnJlbmQoKQojZGVmaW5lIHN6KHgpIGludCh4LnNpemUoKSkKI2RlZmluZSBGIGZpcnN0CiNkZWZpbmUgUyBzZWNvbmQKCiNkZWZpbmUgbWlpIG1hcDxsbGksbGxpPgojZGVmaW5lIHZpIHZlY3RvcjxsbGk+CiNkZWZpbmUgdnZpIHZlY3Rvcjx2ZWN0b3I8bGxpPj4KI2RlZmluZSB2Ym9vbCB2ZWN0b3I8Ym9vbD4KI2RlZmluZSBzZXRpIHNldDxsbGk+CiNkZWZpbmUgcGlpIHBhaXI8bGxpLGxsaT4KI2RlZmluZSBwY2MgcGFpcjxjaGFyICwgY2hhcj4KCiNkZWZpbmUgZ2NkKGEsYikgX19nY2QoKGEpLChiKSkKI2RlZmluZSBsY20oYSxiKSAoYS9nY2QoYSxiKSkqYgojZGVmaW5lIGFicyh4KSAoKHggPCAwKT8tKHgpOngpCgojZGVmaW5lIGVuZGwgJ1xuJwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgcHJpbnQoVCB4KXtjb3V0PDx4PDxlbmRsO30KdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4Kdm9pZCBwcmludDIoVDEgeCxUMiB5KXtjb3V0PDx4PDwiICI8PHk8PGVuZGw7fQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLHR5cGVuYW1lIFQzPgp2b2lkIHByaW50MyhUMSB4LCBUMiB5LFQzIHope2NvdXQ8PHg8PCIgIjw8eTw8IiAiPDx6PDxlbmRsO30KCiNkZWZpbmUgc2NhbmFycihhLG4pIGZvcihsbGkgaT0wO2k8bjtpKyspICAgIGNpbj4+YVtpXTsKI2RlZmluZSBzY2FudmVjdG9yKGEsbikgZm9yKGxsaSBpPTA7aTxuO2krKyl7IGxsaSB4IDsgY2luPj54OyBhLnBiKHgpO30KCiNkZWZpbmUgcHJpbnRhcnIoYSxuKSBmb3IobGxpIGk9MDtpPG47aSsrKSAgIGNvdXQ8PGFbaV08PCIgIjsgY291dDw8ZW5kbDsKI2RlZmluZSBwcmludHZlY3Rvcih2ZWMpIGZvcihhdXRvIHh0IDogdmVjKSBjb3V0PDx4dDw8IiAiOyAgICBjb3V0PDwiXG4iOwoKI2RlZmluZSBGRChOKSBmaXhlZDw8c2V0cHJlY2lzaW9uKE4pCgojZGVmaW5lIGRlYih4KSBjb3V0PDwjeDw8IiAiPDx4PDxlbmRsOwoKY2hhciBpbnB1dF9ncmlkWzUxXVs1MV07CmJvb2wgdmlzaXRlZFs1MV1bNTFdOwpsbGkgaCx3OwpsbGkgbmV4dF94WzhdPXswLDAsMSwtMSwxLC0xLC0xLDF9OwpsbGkgbmV4dF95WzhdPXstMSwxLDAsMCwtMSwxLC0xLDF9OwoKdm9pZCBkZnMobGxpIHgsbGxpIHksbGxpICZjb3VudCl7CiAgICAvL2dldHRpbmcgY3VycmVudCBjaGFyYWN0ZXIKICAgIGNoYXIgY3VyckNoYXIgPSBpbnB1dF9ncmlkW3hdW3ldOwogICAgLy9tYXJraW5nIGl0IGFzIHZpc2l0ZWQgYW5kIGluY3JlbWVudGluZyBjb3VudAogICAgdmlzaXRlZFt4XVt5XT10cnVlOyBjb3VudCsrOwogICAgLy9jaGVja2luZyBpZiBlbmQgb2YgYWxwaGFiZXRzIHJlYWNoZWQKICAgIGlmKGN1cnJDaGFyPT0nWicpIHJldHVybjsKICAgIAogICAgY2hhciBuZXh0Q2hhciA9IGN1cnJDaGFyKzE7CiAgICAvL3BlcmZvcm1pbmcgZGZzCiAgICBmb3IobGxpIGk9MDtpPDg7aSsrKXsKICAgICAgICBsbGkgZHg9eCtuZXh0X3hbaV07CiAgICAgICAgbGxpIGR5PXkrbmV4dF95W2ldOwogICAgICAgIC8vY2hlY2sgaWYgdmFsaWQgcG9zaXRpb24KICAgICAgICBpZigoZHg+PTEgJiYgZHg8PWgpICYmIChkeT49MSAmJiBkeTw9dykpewogICAgICAgICAgICAvL2lmIG5vdCB2aXNpdGVkIGFuZCBuZXh0Q2hhciB0aGVuIGNhbGwgZGZzCiAgICAgICAgICAgIGlmKCF2aXNpdGVkW2R4XVtkeV0gJiYgaW5wdXRfZ3JpZFtkeF1bZHldPT1uZXh0Q2hhcikKICAgICAgICAgICAgICAgIGRmcyhkeCxkeSxjb3VudCk7CiAgICAgICAgfQogICAgfQp9CmxsaSBzb2x2ZSgpewogICAgLy90YWtpbmcgaW5wdXRfZ3JpZCBhbmQgcmVzZXR0aW5nIHZpc2l0ZWQKICAgIGZvcihpbnQgaT0xO2k8PWg7aSsrKXsKICAgICAgICBmb3IoaW50IGo9MTtqPD13O2orKyl7CiAgICAgICAgICAgIGNpbj4+aW5wdXRfZ3JpZFtpXVtqXTsKICAgICAgICAgICAgdmlzaXRlZFtpXVtqXT1mYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgbGxpIG1heF9hbnN3ZXIgPSAwOwoKICAgIC8vdHJhdmVyc2luZyB0aHJvdWdoIGlucHV0LGZpbmRpbmcgQSBhbmQgdGhlbiBjYWxsaW5nIGRmcyBpZiBub3QgdmlzaXRlZAogICAgZm9yKGludCBpPTE7aTw9aDtpKyspewogICAgICAgIGZvcihpbnQgaj0xO2o8PXc7aisrKXsKICAgICAgICAgICAgaWYoaW5wdXRfZ3JpZFtpXVtqXT09J0EnICYmICF2aXNpdGVkW2ldW2pdKXsKICAgICAgICAgICAgICAgIGxsaSBjb3VudD0wOwogICAgICAgICAgICAgICAgZGZzKGksaixjb3VudCk7CiAgICAgICAgICAgICAgICBtYXhfYW5zd2VyID0gbWF4KG1heF9hbnN3ZXIsY291bnQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIG1heF9hbnN3ZXI7Cgp9CmludCBtYWluKCl7CglsbGkgdD0xOwogICAgY2luPj5oPj53OwoJd2hpbGUoaCE9MCAmJiB3IT0wKXsKCQlsbGkgYW5zd2VyID0gc29sdmUoKTsKICAgICAgICBjb3V0PDwiQ2FzZSAiPDx0Kys8PCI6ICI8PGFuc3dlcjw8ZW5kbDsKICAgICAgICBjaW4+Pmg+Pnc7Cgl9CglyZXR1cm4gMDsKfQ==