1 #include<iostream>
2 using namespace std;
3 #include<cstdio>
4 #include<cstring>
5 #define N 130
6 bool map[N][N]={false};
7 bool jz[N][N]={false};
8 int n,b;
9 int sum=0;
10 int xx[]={0,-1,0,0,1};
11 int yy[]={0,0,-1,1,0};
12 void dfs(int x,int y,int dir,int bushu)
13 {
14 if(jz[x][y]) return;
15 sum=max(bushu,sum);
16 jz[x][y]=true;
17 int nx=x+xx[dir],ny=y+yy[dir];
18 if(nx<1||nx>n||ny<1||ny>n||map[nx][ny])
19 {
20 if(dir==1||dir==4)
21 {
22 for(int j=2;j<=3;++j)
23 {
24 int zx=x+xx[j],zy=y+yy[j];
25 if(!map[zx][zy]&&!jz[zx][zy])
26 dfs(zx,zy,j,bushu+1);
27 }
28 }
29 else {
30 int zx=x+xx[1],zy=y+yy[1];
31 if(!map[zx][zy]&&!jz[zx][zy])
32 dfs(zx,zy,1,bushu+1);
33 zx=x+xx[4],zy=y+yy[4];
34 if(!map[zx][zy]&&!jz[zx][zy])
35 dfs(zx,zy,4,bushu+1);
36 }
37 }
38 else dfs(nx,ny,dir,bushu+1);
39
40 jz[x][y]=0;/*回溯*/
41 }
42 void input()
43 {
44 scanf("%d%d",&n,&b);
45 char a1[5];
46 for(int i=0;i<=n;++i)
47 {
48 map[i][0]=map[0][i]=map[n+1][i]=map[i][n+1]=true;
49 }/*有了这个就不用判断出界了*/
50 int b1;
51 for(int i=1;i<=b;++i)
52 {
53 scanf("\n%c%d",&a1,&b1);/*这个读入的地方写错了,坑了我好久*/
54 map[a1[0]-‘A‘+1][b1]=true;
55 }
56 }
57 int main()
58 {
59 input();
60 for(int i=3;i<=4;++i)
61 {
62 memset(jz,0,sizeof(jz));
63 dfs(1,1,i,1);
64 }
65 printf("%d\n",sum);
66 return 0;
67 }