#include <bits/stdc++.h>
using namespace std;
int n, m;
char t[15][15] = {};
char ans[15][15] = {};
int qq = 0;
int ax[5] = {0, 0, 0, 1, 2};
int ay[5] = {0, 1, 2, 1, 1};
int bx[5] = {0, 1, 1, 1, 2};
int by[5] = {2, 0, 1, 2, 2};
int cx[5] = {0, 1, 2, 2, 2};
int cy[5] = {1, 1, 0, 1, 2};
int dx[5] = {0, 1, 1, 1, 2};
int dy[5] = {0, 0, 1, 2, 0};
void ff(int x) {
  if (x > qq) {
    qq = x;
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) ans[i][j] = t[i][j];
  }
  int pp = 0;
  int bj = 0;
  int tt = 0;
  for (int i = 1; i <= n; i++) {
    tt = 0;
    if (bj == 2) break;
    for (int j = m; j >= 1; j--) {
      if (t[i][j] == 0 && bj <= 1)
        pp++;
      else if (t[i][j]) {
        if (tt == 0) {
          tt = 1;
          bj++;
        }
      } else {
        if (t[i][j + 1] == 0 && t[i][j + 2] == 0 && t[i - 1][j + 1] == 0 &&
            t[i + 1][j + 2] == 0)
          pp++;
      }
    }
  }
  if (x + pp / 5 <= qq) return;
  for (int i = 1; i <= n - 2; i++) {
    for (int j = 1; j <= m - 2; j++) {
      int ans = 0;
      for (int k = 0; k < 5; k++) {
        if (t[i + ax[k]][j + ay[k]]) {
          ans = 1;
          break;
        }
      }
      if (ans == 0) {
        for (int k = 0; k < 5; k++) t[i + ax[k]][j + ay[k]] = 'A' + x;
        ff(x + 1);
        for (int k = 0; k < 5; k++) t[i + ax[k]][j + ay[k]] = 0;
      }
    }
  }
  for (int i = 1; i <= n - 2; i++) {
    for (int j = 1; j <= m - 2; j++) {
      int ans = 0;
      for (int k = 0; k < 5; k++) {
        if (t[i + bx[k]][j + by[k]]) {
          ans = 1;
          break;
        }
      }
      if (ans == 0) {
        for (int k = 0; k < 5; k++) t[i + bx[k]][j + by[k]] = 'A' + x;
        ff(x + 1);
        for (int k = 0; k < 5; k++) t[i + bx[k]][j + by[k]] = 0;
      }
    }
  }
  for (int i = 1; i <= n - 2; i++) {
    for (int j = 1; j <= m - 2; j++) {
      int ans = 0;
      for (int k = 0; k < 5; k++) {
        if (t[i + cx[k]][j + cy[k]]) {
          ans = 1;
          break;
        }
      }
      if (ans == 0) {
        for (int k = 0; k < 5; k++) t[i + cx[k]][j + cy[k]] = 'A' + x;
        ff(x + 1);
        for (int k = 0; k < 5; k++) t[i + cx[k]][j + cy[k]] = 0;
      }
    }
  }
  for (int i = 1; i <= n - 2; i++) {
    for (int j = 1; j <= m - 2; j++) {
      int ans = 0;
      for (int k = 0; k < 5; k++) {
        if (t[i + dx[k]][j + dy[k]]) {
          ans = 1;
          break;
        }
      }
      if (ans == 0) {
        for (int k = 0; k < 5; k++) t[i + dx[k]][j + dy[k]] = 'A' + x;
        ff(x + 1);
        for (int k = 0; k < 5; k++) t[i + dx[k]][j + dy[k]] = 0;
      }
    }
  }
  return;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i <= 10; i++)
    for (int j = 0; j <= 10; j++) {
      if (i < 1 || i > n || j < 1 || j > m) t[i][j] = 'Z';
    }
  ff(0);
  printf("%d\n", qq);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      if (ans[i][j] == 0)
        printf(".");
      else
        printf("%c", ans[i][j]);
    }
    printf("\n");
  }
  return 0;
}
