
WA on #2 #3 #4 #8 #10 #11 #12
答案都小了
#include <bits/stdc++.h>
using namespace std;
const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1};
const int N = 125;
int n, b, ans;
int a[N][N];
bool vis[N][N];
void DFS (int x, int y, int op, int jlq) {
//  cout << "***" << x << " " << y << " " << op << " " << jlq << endl;
  ans = ((jlq > ans) ? jlq : ans);
  if (a[x + dx[op]][y + dy[op]] && !vis[x + dx[op]][y + dy[op]]) {
    vis[x][y] = true;
    DFS(x + dx[op], y + dy[op], op, jlq + 1);
    vis[x][y] = false;
  }
  if (!a[x + dx[op]][y + dy[op]] && !vis[x + dx[op]][y + dy[op]]) {
    for (int i = 0; i < 4; ++i) {
      if (((i + op) & 1) && a[x + dx[i]][y + dy[i]] && !vis[x + dx[i]][y + dy[i]]) {
        vis[x][y] = true;
        DFS(x + dx[i], y + dy[i], i, jlq + 1);
        vis[x][y] = false;
      }
    }
  }
}
int main() {
  cin >> n >> b;
  for (int i = 1; i <= b; ++i) {
    string s;
    cin >> s;
    a[s[1] - '0'][s[0] - 'A' + 1] = 1;
  }
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j)
      a[i][j] ^= 1;
  DFS(1, 1, 0, 1);
  DFS(1, 1, 1, 1);
  cout << ans << endl;
  return 0;
}