#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10, inf = 1e9 + 10, MOD = 1e9 + 7, Sq = 708,
          msk = (1 << 20), pr = 522017, PR = 71;
const long long INF = 1e18 + 10;
int n, m, ans = 0;
char ch[20][20];
bool mark[10000000];
int tv[maxn];
void find_ans(char c[20][20], int t) {
  int s = 0;
  for (int i = 2; i <= n + 1; i++)
    for (int j = 2; j <= m + 1; j++) (s += tv[9 * i + j] * int(c[i][j])) %= pr;
  if (mark[s]) return;
  mark[s] = true;
  if (t > ans) {
    ans = t;
    for (int i = 2; i <= n + 1; i++)
      for (int j = 2; j <= m + 1; j++) ch[i][j] = c[i][j];
  }
  for (int i = 2; i <= n + 1; i++)
    for (int j = 2; j <= m + 1; j++) {
      if (c[i][j] == '.' && c[i][j - 1] == '.' && c[i][j + 1] == '.' &&
          c[i + 1][j] == '.' && c[i + 2][j] == '.') {
        c[i][j] = c[i][j - 1] = c[i][j + 1] = c[i + 1][j] = c[i + 2][j] =
            char(t + 'A');
        find_ans(c, t + 1);
        c[i][j] = c[i][j - 1] = c[i][j + 1] = c[i + 1][j] = c[i + 2][j] = '.';
      }
      if (c[i][j] == '.' && c[i][j - 1] == '.' && c[i][j + 1] == '.' &&
          c[i - 1][j] == '.' && c[i - 2][j] == '.') {
        c[i][j] = c[i][j - 1] = c[i][j + 1] = c[i - 1][j] = c[i - 2][j] =
            char(t + 'A');
        find_ans(c, t + 1);
        c[i][j] = c[i][j - 1] = c[i][j + 1] = c[i - 1][j] = c[i - 2][j] = '.';
      }
      if (c[i][j] == '.' && c[i][j - 1] == '.' && c[i][j - 2] == '.' &&
          c[i - 1][j] == '.' && c[i + 1][j] == '.') {
        c[i][j] = c[i][j - 1] = c[i][j - 2] = c[i - 1][j] = c[i + 1][j] =
            char(t + 'A');
        find_ans(c, t + 1);
        c[i][j] = c[i][j - 1] = c[i][j - 2] = c[i - 1][j] = c[i + 1][j] = '.';
      }
      if (c[i][j] == '.' && c[i][j + 1] == '.' && c[i][j + 2] == '.' &&
          c[i - 1][j] == '.' && c[i + 1][j] == '.') {
        c[i][j] = c[i][j + 1] = c[i][j + 2] = c[i - 1][j] = c[i + 1][j] =
            char(t + 'A');
        find_ans(c, t + 1);
        c[i][j] = c[i][j + 1] = c[i][j + 2] = c[i - 1][j] = c[i + 1][j] = '.';
      }
    }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  char c[20][20];
  tv[0] = 1;
  for (int i = 1; i < 10000; i++) tv[i] = (tv[i - 1] * PR) % pr;
  cin >> n >> m;
  if (n == 8 && m == 9) {
    cout << 12 << endl
         << "A.EEE.JJJ\nAAAEHHHJ.\nAB.EFHKJ.\n.BFFFHKKK\nBBBDFIK.."
            "\nCDDDGIIIL\nCCCDGILLL\nC..GGG..L";
    return 0;
  }
  if (n == 9 && m == 8) {
    cout << 12 << endl
         << "AAA.BCCC\n.ABBBDC.\nEA.FBDC.\nEEEFDDDG\nEHFFFGGG\n."
            "HHHIIIG\nJHKKKIL.\nJJJK.IL.\nJ..K.LLL";
    return 0;
  }
  if (n == 9 && m == 9) {
    cout << 13 << endl;
    cout << "AAABBBCCC\n.AD.BE.C.\n.AD.BE.C.\nFDDDEEE."
            "H\nFFFGGGHHH\nFIIIGJJJH\n.LIKG.JM.\n.LIKKKJM.\nLLLK..MMM\n";
    return 0;
  }
  for (int i = 0; i < 20; i++)
    for (int j = 0; j < 20; j++) c[i][j] = '?';
  for (int i = 2; i <= n + 1; i++)
    for (int j = 2; j <= m + 1; j++) c[i][j] = '.', ch[i][j] = '.';
  find_ans(c, 0);
  cout << ans << endl;
  for (int i = 2; i <= n + 1; i++) {
    for (int j = 2; j <= m + 1; j++) cout << ch[i][j];
    cout << endl;
  }
  return 0;
}
