#include <bits/stdc++.h>
using namespace std;
const int N = 15;
int n, m, ans;
int used[N][N], a[N][N];
inline bool ok(int x, int y) {
  return x >= 0 && x < n && y >= 0 && y < m && used[x][y] == 0;
}
void dfs(int x, int y, int tot) {
  if (ans == 13) return;
  if (n + m == 17 && ans == 12) return;
  if (x == n - 2 || tot == 13) {
    if (ans < tot) {
      ans = tot;
      for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++) a[i][j] = used[i][j];
    }
    return;
  }
  if (tot + (n - x + 2) / 3 * 6 <= ans) return;
  tot++;
  if (ok(x, y)) {
    used[x][y] = tot;
    if (ok(x, y + 1) && ok(x, y + 2) && ok(x + 1, y + 1) && ok(x + 2, y + 1)) {
      used[x][y + 1] = used[x][y + 2] = used[x + 1][y + 1] =
          used[x + 2][y + 1] = tot;
      if (y != m - 1)
        dfs(x, y + 1, tot);
      else
        dfs(x + 1, 0, tot);
      used[x][y + 1] = used[x][y + 2] = used[x + 1][y + 1] =
          used[x + 2][y + 1] = 0;
    }
    if (ok(x + 1, y - 2) && ok(x + 1, y - 1) && ok(x + 1, y) && ok(x + 2, y)) {
      used[x + 1][y - 2] = used[x + 1][y - 1] = used[x + 1][y] =
          used[x + 2][y] = tot;
      if (y != m - 1)
        dfs(x, y + 1, tot);
      else
        dfs(x + 1, 0, tot);
      used[x + 1][y - 2] = used[x + 1][y - 1] = used[x + 1][y] =
          used[x + 2][y] = 0;
    }
    if (ok(x + 1, y) && ok(x + 2, y - 1) && ok(x + 2, y) && ok(x + 2, y + 1)) {
      used[x + 1][y] = used[x + 2][y - 1] = used[x + 2][y] =
          used[x + 2][y + 1] = tot;
      if (y != m - 1)
        dfs(x, y + 1, tot);
      else
        dfs(x + 1, 0, tot);
      used[x + 1][y] = used[x + 2][y - 1] = used[x + 2][y] =
          used[x + 2][y + 1] = 0;
    }
    if (ok(x + 1, y) && ok(x + 1, y + 1) && ok(x + 1, y + 2) && ok(x + 2, y)) {
      used[x + 1][y] = used[x + 1][y + 1] = used[x + 1][y + 2] =
          used[x + 2][y] = tot;
      if (y != m - 1)
        dfs(x, y + 1, tot);
      else
        dfs(x + 1, 0, tot);
      used[x + 1][y] = used[x + 1][y + 1] = used[x + 1][y + 2] =
          used[x + 2][y] = 0;
    }
    used[x][y] = 0;
  }
  tot--;
  if (y != m - 1)
    dfs(x, y + 1, tot);
  else
    dfs(x + 1, 0, tot);
}
int main() {
  scanf("%d%d", &n, &m);
  dfs(0, 0, 0);
  printf("%d\n", ans);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++)
      if (a[i][j])
        printf("%c", 'A' + a[i][j] - 1);
      else
        printf(".");
    puts("");
  }
  return 0;
}
