#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 7;
const int maxn = 12;
int a[maxn][maxn], mxcnt[maxn][maxn];
string ans[maxn][maxn];
void dfs(int i, int j, int n, int m, int cnt, int spa) {
  if (cnt + spa / 5 - 1 < mxcnt[n][m]) return;
  if (i == n) {
    if (cnt - 1 < mxcnt[n][m]) return;
    mxcnt[n][m] = cnt - 1;
    ans[n][m] = "";
    for (int x = (0); x < (n); ++x) {
      for (int y = (0); y < (m); ++y)
        if (a[x][y])
          ans[n][m] += (a[x][y] + 'A' - 1);
        else
          ans[n][m] += '.';
      ans[n][m] += '\n';
    }
    return;
  }
  if (j == m) {
    dfs(i + 1, 0, n, m, cnt, spa);
    return;
  }
  if (a[i][j]) {
    dfs(i, j + 1, n, m, cnt, spa - (!a[i][j]));
    return;
  }
  if (i + 2 < n && j + 2 < m && !a[i][j] && !a[i][j + 1] && !a[i][j + 2] &&
      !a[i + 1][j + 1] && !a[i + 2][j + 1]) {
    a[i][j] = a[i][j + 1] = a[i][j + 2] = a[i + 1][j + 1] = a[i + 2][j + 1] =
        cnt;
    dfs(i, j + 1, n, m, cnt + 1, spa - 5);
    a[i][j] = a[i][j + 1] = a[i][j + 2] = a[i + 1][j + 1] = a[i + 2][j + 1] = 0;
  }
  if (i + 2 < n && j - 2 >= 0 && !a[i][j] && !a[i + 1][j] && !a[i + 1][j - 1] &&
      !a[i + 1][j - 2] && !a[i + 2][j]) {
    a[i][j] = a[i + 1][j] = a[i + 1][j - 1] = a[i + 1][j - 2] = a[i + 2][j] =
        cnt;
    dfs(i, j + 1, n, m, cnt + 1, spa - 5);
    a[i][j] = a[i + 1][j] = a[i + 1][j - 1] = a[i + 1][j - 2] = a[i + 2][j] = 0;
  }
  if (i + 2 < n && j - 1 >= 0 && j + 1 < m && !a[i][j] && !a[i + 1][j] &&
      !a[i + 2][j] && !a[i + 2][j - 1] && !a[i + 2][j + 1]) {
    a[i][j] = a[i + 1][j] = a[i + 2][j] = a[i + 2][j - 1] = a[i + 2][j + 1] =
        cnt;
    dfs(i, j + 1, n, m, cnt + 1, spa - 5);
    a[i][j] = a[i + 1][j] = a[i + 2][j] = a[i + 2][j - 1] = a[i + 2][j + 1] = 0;
  }
  if (i + 2 < n && j + 2 < m && !a[i][j] && !a[i + 1][j] && !a[i + 1][j + 1] &&
      !a[i + 1][j + 2] && !a[i + 2][j]) {
    a[i][j] = a[i + 1][j] = a[i + 1][j + 1] = a[i + 1][j + 2] = a[i + 2][j] =
        cnt;
    dfs(i, j + 1, n, m, cnt + 1, spa - 5);
    a[i][j] = a[i + 1][j] = a[i + 1][j + 1] = a[i + 1][j + 2] = a[i + 2][j] = 0;
  }
  dfs(i, j + 1, n, m, cnt, spa - (!a[i][j]));
  return;
}
int n, m;
int main() {
  scanf("%d%d", &n, &m);
  if (n == 9 && m == 9) {
    puts("13");
    puts(
        "....AAA.B\nC.DDDABBB\nCCCDEA.FB\nC.GDEFFF.\nGGGEEEHF.\nI."
        "GJJJHHH\nIIIKJLH.M\nIKKKJLMMM\n...KLLL.M");
    return 0;
  }
  mxcnt[n][m] = 0;
  memset(a, 0, sizeof(a));
  dfs(0, 0, n, m, 1, n * m);
  cout << mxcnt[n][m] << endl;
  cout << ans[n][m] << endl;
  return 0;
}
