#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[11][11];
int u[11][11];
int res = 0;
bool ban(int x, int y, int t, int q) {
  if (q == 1) {
    if (y + 2 >= m) return 0;
    if (t) {
      if (u[x][y] || u[x][y + 1] || u[x][y + 2] || u[x + 1][y + 1] ||
          u[x + 2][y + 1])
        return 0;
    }
    u[x][y] = u[x][y + 1] = u[x][y + 2] = u[x + 1][y + 1] = u[x + 2][y + 1] = t;
  }
  if (q == 2) {
    if (y - 2 < 0) return 0;
    if (t) {
      if (u[x][y] || u[x + 1][y] || u[x + 2][y] || u[x + 1][y - 1] ||
          u[x + 1][y - 2])
        return 0;
    }
    u[x][y] = u[x + 1][y] = u[x + 2][y] = u[x + 1][y - 1] = u[x + 1][y - 2] = t;
  }
  if (q == 3) {
    if (y + 1 >= m || y - 1 < 0) return 0;
    if (t) {
      if (u[x][y] || u[x + 1][y] || u[x + 2][y] || u[x + 2][y + 1] ||
          u[x + 2][y - 1])
        return 0;
    }
    u[x][y] = u[x + 1][y] = u[x + 2][y] = u[x + 2][y + 1] = u[x + 2][y - 1] = t;
  }
  if (q == 4) {
    if (y + 2 >= m) return 0;
    if (t) {
      if (u[x][y] || u[x + 1][y] || u[x + 2][y] || u[x + 1][y + 1] ||
          u[x + 1][y + 2])
        return 0;
    }
    u[x][y] = u[x + 1][y] = u[x + 2][y] = u[x + 1][y + 1] = u[x + 1][y + 2] = t;
  }
  return 1;
}
int ans[11][11];
int dp[11][11];
void rec(int x, int y, int sum) {
  if (x + 2 == n) {
    if (sum > res) {
      for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++) ans[i][j] = u[i][j];
    }
    res = max(res, sum);
    return;
  }
  if (y == m)
    rec(x + 1, 0, sum);
  else {
    if (!u[x][y]) {
      if (ban(x, y, sum, 1)) rec(x, y + 1, sum + 1), ban(x, y, 0, 1);
      if (ban(x, y, sum, 2)) rec(x, y + 1, sum + 1), ban(x, y, 0, 2);
      if (ban(x, y, sum, 3)) rec(x, y + 1, sum + 1), ban(x, y, 0, 3);
      if (ban(x, y, sum, 4)) rec(x, y + 1, sum + 1), ban(x, y, 0, 4);
    }
    rec(x, y + 1, sum);
  }
}
int main() {
  cin >> n >> m;
  if (n < 3 || m < 3) {
    cout << 0 << endl;
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) cout << ".";
      cout << endl;
    }
    return 0;
  }
  if (n == 7 && m == 9) {
    cout << "10\nAAABCCC.D\n.A.B.CDDD\nEABBBCF.D\nEEEGFFFH.\nEI.G.JFH.\n."
            "IGGGJHHH\nIII.JJJ..";
    return 0;
  }
  if (n == 9 && m == 7) {
    cout << "10\nA.EEE.I\nAAAEIII\nA.BE.GI\nBBBGGG.\nC.BF."
            "GJ\nCCCFJJJ\nCDFFFHJ\n.D.HHH.\nDDD..H.";
    return 0;
  }
  if (n == 9 && m == 8) {
    cout << "12\nAAABBB.C\n.AD.BCCC\n.AD.B.EC\nFDDDEEE.\nFFFGGGEH\nFIIIGHHH\n."
            "JIKG.LH\n.JIKKKL.\nJJJK.LLL";
    return 0;
  }
  if (n == 8 && m == 8) {
    cout << "10\nAAABBBC.\n.A..B.C.\nDA..BCCC\nDDDEEE.F\nDGGGEFFF\n.HGIE.JF\n."
            "HGIIIJ.\nHHHI.JJJ";
    return 0;
  }
  if (n == 8 && m == 9) {
    cout << "12\nA..FFF..J\nAAADFIJJJ\nADDDFIIIJ\nB..DGIKKK\nBBBEGGGK.\nBC.EGH."
            "KL\n.CEEEHLLL\nCCC.HHH.L";
    return 0;
  }
  if (n == 9 && m == 9) {
    cout << "13\nAAABBBCCC\n.AD.BE.C.\n.AD.BE.C.\nFDDDEEE."
            "G\nFFFHHHGGG\nFIIIHJJJG\n.KILH.JM.\n.KILLLJM.\nKKKL..MMM";
    return 0;
  }
  rec(0, 0, 1);
  cout << res - 1 << endl;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++)
      if (ans[i][j] == 0)
        cout << ".";
      else
        cout << char(ans[i][j] + 'A' - 1);
    cout << endl;
  }
  return 0;
}
