#include <bits/stdc++.h>
using namespace std;
map<pair<int, pair<int, int> >, int> M;
int n, m, rans,
    mo[5][5][5] = {{{1, 1, 1}, {0, 1, 0}, {0, 1, 0}},
                   {{0, 0, 1}, {1, 1, 1}, {0, 0, 1}},
                   {{0, 1, 0}, {0, 1, 0}, {1, 1, 1}},
                   {{1, 0, 0}, {1, 1, 1}, {1, 0, 0}}};
char ab[12][12];
int dfs(int x, int y, int mask) {
  if (x >= n - 1) return 0;
  if (y >= m - 1) return dfs(x + 1, 1, mask >> 2);
  pair<int, pair<int, int> > cur = make_pair(mask, make_pair(x, y));
  if (M.find(cur) != M.end()) return M[cur];
  int &ans = M[cur];
  int nmask = mask;
  for (int i = 0; i < 4; i++) {
    nmask = mask;
    bool flag = 1;
    for (int j = 0; j < 3; j++)
      for (int k = 0; k < 3; k++)
        if (mo[i][j][k] && (mask & (1 << (j * m + k)))) flag = 0;
    if (!flag) continue;
    for (int j = 0; j < 3; j++)
      for (int k = 0; k < 3; k++)
        if (mo[i][j][k]) nmask |= 1 << (j * m + k);
    ans = max(dfs(x, y + 1, nmask >> 1) + 1, ans);
  }
  ans = max(dfs(x, y + 1, mask >> 1), ans);
  return ans;
}
void rec(int x, int y, int now, int mask) {
  if (x >= n - 1) return;
  if (y >= m - 1) {
    rec(x + 1, 1, now, mask >> 2);
    return;
  }
  int nmask = mask;
  for (int i = 0; i < 4; i++) {
    nmask = mask;
    bool flag = 1;
    for (int j = 0; j < 3; j++)
      for (int k = 0; k < 3; k++)
        if (mo[i][j][k] && (mask & (1 << (j * m + k)))) flag = 0;
    if (!flag) continue;
    for (int j = 0; j < 3; j++)
      for (int k = 0; k < 3; k++)
        if (mo[i][j][k]) nmask |= 1 << (j * m + k);
    if (dfs(x, y + 1, nmask >> 1) + 1 + now == rans) {
      for (int j = 0; j < 3; j++)
        for (int k = 0; k < 3; k++)
          if (mo[i][j][k]) ab[x + j][y + k] = 65 + now;
      rec(x, y + 1, now + 1, nmask >> 1);
      return;
    }
  }
  rec(x, y + 1, now, mask >> 1);
}
int main() {
  scanf("%d%d", &n, &m);
  printf("%d\n", rans = dfs(1, 1, 0));
  rec(1, 1, 0, 0);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      putchar(ab[i][j] == 0 ? '.' : ab[i][j]);
      if (j == m) putchar('\n');
    }
  return 0;
}
