/*
ID: niepeng1
PROG: snail
LANG: C++
*/
/*
这个问题简单,只需要简单的深搜索就行了。
基本的深搜,可是我却花了好久。
问题就在,在一个点搜索的额时候没有记忆已
经搜索的方向,导致函数在一个点上左右上
下方向变换个不停,导致函数陷入死循环,囧。
后来又优化一下。挺简单的其实。
*/
#include<math.h>
#include<iostream>
#include<memory.h>
using namespace std;
int map[121][121];
int n,m,max1=0;
void Dfs(int x,int y,int dir,int num)
{
if(max1 <num)
max1=num;
switch(dir)
{
case 0:
if(x == n-1 || map[x+1][y]==1)
{
if(y<n-1&&map[x][y+1]==0)
{
Dfs(x,y,1,num);
}
if(y>0&&map[x][y-1]==0)
{
Dfs(x,y,3,num);
}
}
else
{
if(map[x+1][y]==-1)
return;
/* {
if( max1 < num)
max1=num;
return;
}
*/
else
{
map[x][y]=-1;
Dfs(x+1,y,0,num+1);
map[x][y]=0;
}
}
break;
case 1:
if(y == n-1 || map[x][y+1]==1)
{
if(x<n-1&&map[x+1][y]==0)
{
Dfs(x,y,0,num);
}
if(x>0&&map[x-1][y]==0)
{
Dfs(x,y,2,num);
}
}
else
{
if( map[x][y+1]==-1)
return;
/* {
if( max1 < num)
max1=num;
return;
}
*/
else
{
map[x][y]=-1;
Dfs(x,y+1,1,num+1);
map[x][y]=0;
}
}
break;
case 2:
if(x == 0 || map[x-1][y]==1)
{
if(y<n-1&&map[x][y+1]==0)
{
Dfs(x,y,1,num);
}
if(y>0&&map[x][y-1]==0)
{
Dfs(x,y,3,num);
}
}
else
{
if(map[x-1][y]==-1)
return;
/* {
if( max1 < num)
max1=num;
return;
}
*/
else
{
map[x][y]=-1;
Dfs(x-1,y,2,num+1);
map[x][y]=0;
}
}
break;
case 3:
if(y == 0 || map[x][y-1]==1)
{
if(x<n-1&&map[x+1][y]==0)
{
Dfs(x,y,0,num);
}
if(x>0&&map[x-1][y]==0)
{
Dfs(x,y,2,num);
}
}
else
{
if(map[x][y-1]==-1)
return;
/* {
if( max1 < num)
max1=num;
return;
}
*/
else
{
map[x][y]=-1;
Dfs(x,y-1,3,num+1);
map[x][y]=0;
}
}
break;
}
}
int main()
{
freopen("snail.in","r",stdin);
freopen("snail.out","w",stdout);
int i,y;
char x;
scanf("%d %d",&n,&m);
memset(map,0,sizeof(map));
getchar();
for(i=0;i<m;i++)
{
scanf("%c %d",&x,&y);
getchar();
map[x-'A'][y-1]=1;
}
map[0][0]=-1;
Dfs(0,0,0,0);
Dfs(0,0,1,0);
printf("%d/n",max1+1);
return 0;
}