#include <bits/stdc++.h>
#pragma GCC optimize("Ofast", 3, "inline")
using namespace std;
int n, m, ch[13][13], a[13][13], ans;
const int w[4][3][3] = {{{1, 1, 1}, {0, 1, 0}, {0, 1, 0}},
                        {{0, 1, 0}, {0, 1, 0}, {1, 1, 1}},
                        {{1, 0, 0}, {1, 1, 1}, {1, 0, 0}},
                        {{0, 0, 1}, {1, 1, 1}, {0, 0, 1}}};
inline bool check(int x, int y, int i) {
  for (int(u) = 0; (u) < (3); (u)++)
    for (int(v) = 0; (v) < (3); (v)++)
      if (w[i][u][v])
        if (a[x + u][y + v]) return 0;
  return 1;
}
void dfs(int x, int y, int cnt) {
  if ((n - x) * m - y <= (ans - cnt) * 6) return;
  if (y + 2 >= m) {
    dfs(x + 1, 0, cnt);
    return;
  }
  if (x + 2 >= n) {
    if (cnt > ans) {
      ans = cnt;
      memcpy(ch, a, sizeof a);
    }
    return;
  }
  for (int(i) = 0; (i) < (4); (i)++)
    if (check(x, y, i)) {
      cnt++;
      for (int(u) = 0; (u) < (3); (u)++)
        for (int(v) = 0; (v) < (3); (v)++)
          if (w[i][u][v]) a[x + u][y + v] = cnt;
      dfs(x, y + 1, cnt);
      cnt--;
      for (int(u) = 0; (u) < (3); (u)++)
        for (int(v) = 0; (v) < (3); (v)++)
          if (w[i][u][v]) a[x + u][y + v] = 0;
    }
  dfs(x, y + 1, cnt);
}
void print() {
  cout << ans << endl;
  for (int(i) = 0; (i) < (n); (i)++) {
    for (int(j) = 0; (j) < (m); (j)++)
      cout.put(ch[i][j] ? 'A' + ch[i][j] - 1 : '.');
    cout << endl;
  }
  exit(0);
}
int main() {
  ios::sync_with_stdio(false);
  cout.tie(0), cin.tie(0);
  cin >> n >> m;
  if (n < 3 or m < 3) print();
  dfs(0, 0, 0);
  print();
  return 0;
}
