#include <bits/stdc++.h>
using namespace std;
int ans = -1, n, m, mu;
string c[11];
string s[11];
const int d[4][5][2] = {0, 0, 1, 0, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1,
                        0, 2, 1, 1, 2, 1, 0, 2, 1, 0, 1, 1, 1, 2,
                        2, 2, 0, 1, 1, 1, 2, 0, 2, 1, 2, 2};
inline void tst(int x) {
  ans = x;
  for (int i = 1; i <= n; ++i) s[i] = c[i];
}
inline void dfs(int x, int y, int cnt) {
  if (y == m + 1) {
    dfs(x + 1, 1, cnt);
    return;
  }
  if (x == n + 1) {
    if (cnt > ans) tst(cnt);
    return;
  }
  if ((n - x) * m / 5 + cnt <= ans) return;
  int i, j;
  bool ok;
  for (i = 0; i < 4; ++i) {
    ok = 1;
    for (j = 0; j < 5; ++j) {
      int tx = x + d[i][j][0], ty = y + d[i][j][1];
      if (c[tx][ty] != '.') {
        ok = 0;
        break;
      }
    }
    if (ok) {
      for (int j = 0; j < 5; ++j) c[x + d[i][j][0]][y + d[i][j][1]] = cnt;
      dfs(x, y + 1, cnt + 1);
      for (int j = 0; j < 5; ++j) c[x + d[i][j][0]][y + d[i][j][1]] = '.';
    }
  }
  dfs(x, y + 1, cnt);
  if (cnt > ans) tst(cnt);
}
int main() {
  int i, j;
  cin >> n >> m;
  mu = n * m;
  for (i = 1; i <= n; ++i) {
    c[i] += '#';
    for (j = 1; j <= m; ++j) c[i] += '.';
    c[i] += '#';
  }
  dfs(1, 1, 0);
  cout << ans << endl;
  for (i = 1; i <= n; ++i, cout << endl)
    for (j = 1; j <= m; ++j)
      if (s[i][j] == '.')
        cout << s[i][j];
      else
        cout << (char)(s[i][j] + 'A');
  cout << endl;
  return 0;
}
