#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const int N = 10;
char a[N][N], b[N][N];
bool figure[4][3][3];
int n, m, ans = 0, best = 0;
bool match(int i, int j, int d) {
  if (i + 3 > n) return false;
  if (j + 3 > m) return false;
  for (int dx = 0; dx < 3; ++dx)
    for (int dy = 0; dy < 3; ++dy)
      if (figure[d][dx][dy])
        if (a[i + dx][j + dy] != 0) return false;
  return true;
}
void push(int i, int j, int d, char c) {
  for (int dx = 0; dx < 3; ++dx)
    for (int dy = 0; dy < 3; ++dy)
      if (figure[d][dx][dy]) a[i + dx][j + dy] = c;
}
void go(int i, int j) {
  if (j == m) i++, j = 0;
  if (i == n) return;
  if ((i == 1) && (ans == 0)) return;
  if (ans > best) {
    best = ans;
    memcpy(b, a, sizeof(a));
  }
  if ((n - i - 2) * m + (m - j + 1) <= (best + 1 - ans) * 5) return;
  go(i, j + 1);
  for (int d = 0; d < 4; ++d)
    if (match(i, j, d)) {
      ans++;
      push(i, j, d, ans);
      go(i, j + 1);
      push(i, j, d, 0);
      ans--;
    }
}
int main() {
  figure[0][0][0] = figure[0][0][1] = figure[0][0][2] = figure[0][1][1] = true,
  figure[0][2][1] = true;
  for (int d = 0; d < 3; ++d)
    for (int i = 0; i < 3; ++i)
      for (int j = 0; j < 3; ++j) figure[d + 1][j][3 - i - 1] = figure[d][i][j];
  scanf("%d%d", &n, &m);
  best = (n >= 3) && (m >= 3) ? (n * m) / 6 - 2 : 0;
  go(0, 0);
  printf("%d\n", best);
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j)
      if (b[i][j] == 0)
        printf(".");
      else
        printf("%c", 'A' + b[i][j] - 1);
    printf("\n");
  }
  return 0;
}
