#include <bits/stdc++.h>
#pragma comment(linker, "/stack:67108864")
using namespace std;
template <class T>
T abs(T a) {
  return (a) > 0 ? (a) : -(a);
}
template <class T>
T sqr(T a) {
  return (a) * (a);
}
const long double PI = 3.1415926535897932, EPS = 1E-9;
const int INF = 1000 * 1000 * 1000, NMAX = 10;
const int fx[4][5][2] = {{{0, 0}, {0, 1}, {0, 2}, {1, 1}, {2, 1}},
                         {{0, 0}, {1, 0}, {2, 0}, {1, -1}, {1, -2}},
                         {{0, 0}, {1, 0}, {2, 0}, {2, -1}, {2, 1}},
                         {{0, 0}, {1, 0}, {2, 0}, {1, 1}, {1, 2}}};
int n, m;
int a[NMAX][NMAX];
int result = 1;
int answer[NMAX][NMAX];
void dfs(int sdbkhjshfjhf) {
  if (result < sdbkhjshfjhf) {
    result = sdbkhjshfjhf;
    memcpy(answer, a, sizeof(a));
  }
  for (int x = 0; x < int(n); ++x) {
    for (int y = 0; y < int(m); ++y) {
      int success = 0;
      if (a[x][y] == 0)
        for (int idx = 0; idx < int(4); ++idx) {
          bool f = true;
          for (int i = 0; i < int(5); ++i) {
            int nx = x + fx[idx][i][0];
            int ny = y + fx[idx][i][1];
            if (nx < 0 || nx >= n || ny < 0 || ny >= m || a[nx][ny] != 0) {
              f = false;
              break;
            }
          }
          if (f) {
            ++success;
            for (int i = 0; i < int(5); ++i) {
              int nx = x + fx[idx][i][0];
              int ny = y + fx[idx][i][1];
              a[nx][ny] = sdbkhjshfjhf;
            }
            dfs(sdbkhjshfjhf + 1);
            for (int i = 0; i < int(5); ++i) {
              int nx = x + fx[idx][i][0];
              int ny = y + fx[idx][i][1];
              a[nx][ny] = 0;
            }
          }
        }
      if (success >= 2) {
        return;
      }
    }
  }
}
int main() {
  srand(time(NULL));
  cin >> n >> m;
  for (int i = 0; i < int(n); ++i)
    for (int j = 0; j < int(m); ++j) {
      a[i][j] = 0;
    }
  dfs(0);
  cout << result - 1 << endl;
  for (int k = 0; k < int(n); ++k) {
    for (int t = 0; t < int(m); ++t) {
      cout << (answer[k][t] == 0 ? '.' : char('A' + answer[k][t] - 1));
    }
    cout << "\n";
  }
  return 0;
}
