//信息学奥赛一本通网站1212:
LETTERS
#include<bits/stdc++.h>
using namespace std;
int x[4]={0,0,-1,1};
int y[4]={1,-1,0,0};
int b[27];
char a[25][25];
int r,s,foot=1;
int maxn=1;
/*为什么在这一题里面将判断坐标写成函数,才能对?(指的是fun函数)*/
int fun(int i,int j)//判断坐标是否符合条件
{
if(i>=1&&i<=r&&j>=1&&j<=s)
{
return 1;
}
else return 0;
}
void search(int foot,int l,int r)
{
if(foot>maxn)
maxn=foot;
for(int i=0;i<4;i++)
{
int nx=l+x[i];
int ny=r+y[i];
if(fun(nx,ny)&&b[a[nx][ny]-65]==0)//在边界之内,新挖出的点没有到过
{
b[a[nx][ny]-65]=1;
search(foot+1,nx,ny);
b[a[nx][ny]-65]=0;
}
}
}
int main()
{
//freopen("1.txt","r",stdin);
cin>>r>>s;//行,列
for(int i=1;i<=r;i++)
for(int j=1;j<=s;j++)
cin>>a[i][j];
memset(b,0,sizeof(b));
b[a[1][1]-65]=1;
search(1,1,1);
cout<<maxn;
// fclose(stdin);
return 0;
}
/*
样例输入
3 6
HFDFFB
AJHGDH
DGAGEH
*/