// Link - https://www.spoj.com/problems/ABCPATH/
#include <bits/stdc++.h>
using namespace std ;
char mat[52][52] ;
int dp[52][52] ;
int h = 0 , w = 0 ;
int ans = INT32_MIN ;
bool valid ( int x , int y , int prev , int curr ) {
if ( x < 1 || x > 50 || y < 1 || y > 50 )
return 0 ;
if ( curr-prev != 1 )
return 0 ;
return 1 ;
}
int xc[] = {-1,-1,-1,0,+1,+1,+1,0} ;
int yc[] = {-1,0,+1,+1,+1,0,-1,-1} ;
void dfs ( int x , int y , char let , int dis ) {
ans = max ( ans , dis ) ;
for ( int i = 0 ; i < 8 ; i++ ) {
int nx = x+xc[i] ;
int ny = y+yc[i] ;
if ( valid(nx,ny,let,mat[nx][ny]) ) {
dfs(nx,ny,mat[nx][ny],dis+1) ;
}
}
}
int32_t main () {
int Case = 1 ;
while (true) {
for ( int i = 1 ; i <= h ; i++ ) {
for ( int j = 1 ; j <= w ; j++ ) {
mat[i][j] = '#' ;
}
}
for ( int i = 1 ; i <= h ; i++ ) {
for ( int j = 1 ; j <= w ; j++ ) {
dp[i][j] = -1 ;
}
}
cin >> h >> w ;
if ( h == 0 and w == 0 )
break ;
for ( int i = 1 ; i <= h ; i++ ) {
for ( int j = 1 ; j <= w ; j++ ) {
cin >> mat[i][j] ;
}
}
for ( int i = 1 ; i <= h ; i++ ) {
for ( int j = 1 ; j <= w ; j++ ) {
if ( mat[i][j] == 'A' )
dfs(i,j,mat[i][j],1) ;
}
}
cout << "Case " << Case << ": " << ans << "\n" ;
Case++ ;
}
return 0 ;
}