#include <bits/stdc++.h>
using namespace std;
const int MAXN = 15;
int n, m, mx, l = 1, in;
int mark[MAXN][MAXN];
char c[MAXN][MAXN];
vector<pair<int, int> > p[5];
int makex(int v, int pos, int num) { return p[v][pos].first + num; }
int makey(int v, int pos, int num) { return p[v][pos].second + num; }
void bt() {
  if (mx <= l - 1) {
    mx = l - 1;
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++)
        !mark[i][j] ? c[i][j] = '.' : c[i][j] = char('A' + mark[i][j] - 1);
  }
  int t = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      if (mark[i][j]) continue;
      t++;
      if ((i == 1 || i == n) || (j == 1 || j == m)) continue;
      if ((in - t) / 5 + l <= mx) return;
      int x[MAXN] = {}, y[MAXN] = {};
      for (int k = 0; k < 4; k++) {
        bool b = false;
        for (int s = 0; s < 5; s++) {
          x[s] = makex(k, s, i), y[s] = makey(k, s, j);
          if (mark[x[s]][y[s]]) b = true;
        }
        if (b) continue;
        for (int s = 0; s < 5; s++) mark[x[s]][y[s]] = l;
        !k ? in -= 6 : in -= 5;
        ++l, bt(), --l;
        !k ? in += 6 : in += 5;
        for (int s = 0; s < 5; s++) mark[x[s]][y[s]] = 0;
      }
    }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  in = n * m;
  p[2] = {{0, 0}, {0, 1}, {0, -1}, {-1, -1}, {1, -1}};
  p[1] = {{0, 0}, {0, -1}, {0, 1}, {-1, 1}, {1, 1}};
  p[0] = {{0, 0}, {-1, 0}, {1, 0}, {1, -1}, {1, 1}};
  p[3] = {{0, 0}, {1, 0}, {-1, 0}, {-1, -1}, {-1, 1}};
  bt();
  cout << mx << endl;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) cout << c[i][j];
    cout << '\n';
  }
  return 0;
}
