#include <bits/stdc++.h>
using namespace std;
int px[5][6] = {
    {0, -1, 1, 0, 0}, {0, 1, 2, 0, 0}, {0, -1, 1, 0, 0}, {0, -1, -2, 0, 0}};
int py[5][6] = {
    {0, 0, 0, 1, 2}, {0, 0, 0, -1, 1}, {0, 0, 0, -1, -2}, {0, 0, 0, -1, 1}};
char in[10][10], ans[10][10];
int r, c;
int total = 0;
bool cancolor(int y, int x, int idx) {
  for (int a = 0; a < 5; a++) {
    int yy = py[idx][a] + y;
    int xx = px[idx][a] + x;
    if (yy < 0 || xx < 0 || yy >= r || xx >= c || in[yy][xx] != '.')
      return false;
  }
  return true;
}
void coloring(int y, int x, int idx, int color) {
  for (int a = 0; a < 5; a++) {
    int yy = py[idx][a] + y;
    int xx = px[idx][a] + x;
    in[yy][xx] = color + 'A';
  }
}
void recoloring(int y, int x, int idx) {
  for (int a = 0; a < 5; a++) {
    int yy = py[idx][a] + y;
    int xx = px[idx][a] + x;
    in[yy][xx] = '.';
  }
}
void backtrack(int y, int x, int pt) {
  if (x == c) {
    backtrack(y + 1, 0, pt);
    return;
  }
  if (y == r) {
    if (pt > total) {
      total = pt;
      for (int a = 0; a < r; a++)
        for (int b = 0; b < c; b++) ans[a][b] = in[a][b];
    }
    return;
  }
  if (pt + (r * c - y * c - x) / 5 < total) {
    return;
  }
  if (in[y][x] == '.') {
    for (int a = 0; a < 4; a++) {
      if (cancolor(y, x, a) == true) {
        coloring(y, x, a, pt);
        backtrack(y, x + 1, pt + 1);
        recoloring(y, x, a);
      }
    }
  }
  backtrack(y, x + 1, pt);
}
int main() {
  cin >> r >> c;
  for (int a = 0; a < r; a++) {
    for (int b = 0; b < c; b++) {
      in[a][b] = ans[a][b] = '.';
    }
  }
  backtrack(0, 0, 0);
  printf("%d\n", total);
  for (int a = 0; a < r; a++) {
    for (int b = 0; b < c; b++) printf("%c", ans[a][b]);
    printf("\n");
  }
}
