#include <bits/stdc++.h>
using namespace std;
const int dx[4][4] = {{0, 0, 1, 2}, {1, 1, 1, 2}, {1, 2, 2, 2}, {1, 1, 1, 2}};
const int dy[4][4] = {
    {1, 2, 1, 1}, {-2, -1, 0, 0}, {0, -1, 0, 1}, {0, 1, 2, 0}};
const int dxx[] = {-1, 0, 1, 0};
const int dyy[] = {0, 1, 0, -1};
const int res[10][10] = {
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},   {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},   {0, 0, 0, 1, 1, 2, 2, 3, 3, 4},
    {0, 0, 0, 1, 2, 2, 3, 4, 4, 5},   {0, 0, 0, 2, 2, 4, 4, 5, 6, 7},
    {0, 0, 0, 2, 3, 4, 5, 6, 7, 8},   {0, 0, 0, 3, 4, 5, 6, 8, 9, 10},
    {0, 0, 0, 3, 4, 6, 7, 9, 10, 12}, {0, 0, 0, 4, 5, 7, 8, 10, 12, 13}};
int m, n, ans = -1, cnt, a[100][100], A[100][100], border[100][100];
int ok(int x, int y, int t) {
  for (int i = 0; i <= 3; i++) {
    int xx = x + dx[t][i], yy = y + dy[t][i];
    if (xx <= 0 || yy <= 0 || xx > m || yy > n || a[xx][yy]) return 0;
  }
  return 1;
}
void att(int x, int y) {
  if (x > m) {
    if (cnt > ans) {
      ans = cnt;
      for (int i = 1; i <= m; i++)
        for (int j = 1; j <= n; j++) A[i][j] = a[i][j];
      if (ans == res[m][n]) {
        cout << ans << endl;
        for (int i = 1; i <= m; i++) {
          for (int j = 1; j <= n; j++)
            cout << (A[i][j] ? char(A[i][j] + 64) : '.');
          puts("");
        }
        exit(0);
      }
    }
    return;
  }
  if (y > n) {
    att(x + 1, 1);
    return;
  }
  if (!a[x][y] && border[x][y])
    for (int t = 0; t <= 3; t++)
      if (ok(x, y, t)) {
        vector<int> X, Y;
        a[x][y] = ++cnt;
        for (int i = 0; i <= 3; i++) {
          int xx = x + dx[t][i], yy = y + dy[t][i];
          a[xx][yy] = cnt;
          for (int j = 0; j <= 3; j++) {
            int xxx = xx + dxx[j], yyy = yy + dyy[j];
            if (!a[xxx][yyy] && !border[xxx][yyy])
              border[xxx][yyy] = 1, X.push_back(xxx), Y.push_back(yyy);
          }
        }
        att(x, y + 1);
        for (int i = 0; i <= 3; i++) a[x + dx[t][i]][y + dy[t][i]] = 0;
        for (int i = 0; i < int(X.size()); i++) border[X[i]][Y[i]] = 0;
        a[x][y] = 0;
        --cnt;
      }
  att(x, y + 1);
}
int main() {
  cin >> m >> n;
  for (int j = 1; j <= n; j++) border[1][j] = 1;
  att(1, 1);
}
