#include <bits/stdc++.h>
using namespace std;
char res[9][10], aux[9][10];
int R, C, bestPL;
inline void unplace(int r, int c, int no) {
  if (no == 0) {
    aux[r - 1][c] = aux[r][c] = aux[r + 1][c] = aux[r - 1][c - 1] =
        aux[r - 1][c + 1] = '.';
  } else if (no == 1) {
    aux[r][c - 1] = aux[r][c] = aux[r][c + 1] = aux[r + 1][c + 1] =
        aux[r - 1][c + 1] = '.';
  } else if (no == 2) {
    aux[r - 1][c] = aux[r][c] = aux[r + 1][c] = aux[r + 1][c - 1] =
        aux[r + 1][c + 1] = '.';
  } else {
    aux[r][c - 1] = aux[r][c] = aux[r][c + 1] = aux[r - 1][c - 1] =
        aux[r + 1][c - 1] = '.';
  }
}
inline int place(int r, int c, int no, int pl) {
  if (no == 0) {
    if (aux[r - 1][c] == '.' && aux[r][c] == '.' && aux[r + 1][c] == '.' &&
        aux[r - 1][c - 1] == '.' && aux[r - 1][c + 1] == '.') {
      aux[r - 1][c] = aux[r][c] = aux[r + 1][c] = aux[r - 1][c - 1] =
          aux[r - 1][c + 1] = 'A' + pl;
      return 1;
    }
  } else if (no == 1) {
    if (aux[r][c - 1] == '.' && aux[r][c] == '.' && aux[r][c + 1] == '.' &&
        aux[r + 1][c + 1] == '.' && aux[r - 1][c + 1] == '.') {
      aux[r][c - 1] = aux[r][c] = aux[r][c + 1] = aux[r + 1][c + 1] =
          aux[r - 1][c + 1] = 'A' + pl;
      return 1;
    }
  } else if (no == 2) {
    if (aux[r - 1][c] == '.' && aux[r][c] == '.' && aux[r + 1][c] == '.' &&
        aux[r + 1][c - 1] == '.' && aux[r + 1][c + 1] == '.') {
      aux[r - 1][c] = aux[r][c] = aux[r + 1][c] = aux[r + 1][c - 1] =
          aux[r + 1][c + 1] = 'A' + pl;
      return 1;
    }
  } else {
    if (aux[r][c - 1] == '.' && aux[r][c] == '.' && aux[r][c + 1] == '.' &&
        aux[r - 1][c - 1] == '.' && aux[r + 1][c - 1] == '.') {
      aux[r][c - 1] = aux[r][c] = aux[r][c + 1] = aux[r - 1][c - 1] =
          aux[r + 1][c - 1] = 'A' + pl;
      return 1;
    }
  }
  return 0;
}
void f(int r, int c, int pl) {
  if (c == C - 1) {
    c = 1;
    if (++r == R - 1) {
      if (pl > bestPL) {
        bestPL = pl;
        memcpy(res, aux, sizeof(aux));
      }
      return;
    }
  }
  if ((R - r + 2) / 3 * ((C + 2) / 3) + (C - c + 2) / 3 + pl <= bestPL) return;
  if (aux[r][c] == '.')
    for (int i = 0; i < (4); ++i)
      if (place(r, c, i, pl)) {
        f(r, c + 1, pl + 1);
        unplace(r, c, i);
      }
  f(r, c + 1, pl);
}
int main() {
  cin >> R >> C;
  for (int i = 0; i < (R); ++i)
    for (int j = 0; j < (C); ++j) res[i][j] = aux[i][j] = '.';
  for (int i = 0; i < (R); ++i) res[i][C] = aux[i][C] = 0;
  if (min(R, C) >= 3) f(1, 1, 0);
  printf("%d\n", bestPL);
  for (int i = 0; i < (R); ++i) printf("%s\n", res[i]);
  return 0;
}
