#include <bits/stdc++.h>
int xx[4][5] = {
    {0, 0, 0, 1, 2}, {0, 1, 1, 1, 2}, {0, 1, 2, 2, 2}, {0, 1, 1, 1, 2}};
int yy[4][5] = {
    {0, 1, 2, 1, 1}, {2, 0, 1, 2, 2}, {1, 1, 0, 1, 2}, {0, 0, 1, 2, 0}};
int n, i, m, j, k, ans, tt = 0, t1 = 0, next = 0;
int a[20][20];
int best[20][20];
char out[20][20];
int number[20];
void make() {
  for (i = 1; i <= n; i++)
    for (j = 1; j <= m; j++) {
      if (a[i][j] == 0)
        out[i][j] = '.';
      else
        out[i][j] = 'A' + a[i][j] - 1;
    }
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) printf("%c", out[i][j]);
    printf("\n");
  }
  printf("\n\n");
}
inline int canplace(int x, int y, int num) {
  for (int i = 0; i < 5; i++)
    if (a[x + xx[num][i]][y + yy[num][i]] != 0) return 0;
  return 1;
}
inline void place(int zz, int x, int y, int num) {
  for (int i = 0; i < 5; i++) {
    a[x + xx[num][i]][y + yy[num][i]] = zz;
    number[x + xx[num][i]]--;
  }
}
inline void replace(int x, int y, int num) {
  for (int i = 0; i < 5; i++) {
    a[x + xx[num][i]][y + yy[num][i]] = 0;
    number[x + xx[num][i]]++;
  }
}
void dfs(int x, int x1, int y1) {
  int next = 0;
  for (j = y1; j <= m; j++)
    if (!a[x1][j]) next++;
  for (i = x1 + 1; i <= n; i++) {
    next += number[i];
    tt++;
  }
  if (next / 5 + x - 1 <= ans) return;
  int i, j, k;
  if (x - 1 > ans) {
    ans = x - 1;
    for (i = 1; i <= n; i++)
      for (j = 1; j <= m; j++) best[i][j] = a[i][j];
  }
  for (i = x1; i <= x1; i++)
    for (j = y1; j <= m - 2; j++)
      for (k = 0; k < 4; k++) {
        t1++;
        if (canplace(i, j, k)) {
          place(x, i, j, k);
          if (j < m)
            dfs(x + 1, i, j + 1);
          else
            dfs(x + 1, i + 1, 1);
          replace(i, j, k);
        }
      }
  for (i = x1 + 1; i <= n - 2; i++)
    for (j = 1; j <= m - 2; j++)
      for (k = 0; k < 4; k++) {
        t1++;
        if (canplace(i, j, k)) {
          place(x, i, j, k);
          if (j < m)
            dfs(x + 1, i, j + 1);
          else
            dfs(x + 1, i + 1, 1);
          replace(i, j, k);
        }
      }
}
int main() {
  tt = 0;
  ans = 0;
  scanf("%d%d", &n, &m);
  for (i = 0; i <= n + 1; i++)
    for (j = 0; j <= m + 1; j++) a[i][j] = 1;
  for (i = 1; i <= n; i++)
    for (j = 1; j <= m; j++) a[i][j] = 0;
  for (i = 1; i <= n; i++) number[i] = m;
  dfs(1, 1, 1);
  printf("%d\n", ans);
  for (i = 1; i <= n; i++)
    for (j = 1; j <= m; j++) {
      if (best[i][j] == 0)
        out[i][j] = '.';
      else
        out[i][j] = 'A' + best[i][j] - 1;
    }
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) printf("%c", out[i][j]);
    printf("\n");
  }
  return 0;
}
