#include<bits/stdc++.h>
using namespace std;
int n,m,cnt;
int mx[10][10];
char ans[10][10],nwans[10][10];
int dx[4][4]={{1,-1,0,0},{0,0,-1,-2},{-1,1,0,0},{0,0,1,2}};
int dy[4][4]={{0,0,-1,-2},{-1,1,0,0},{0,0,1,2},{1,-1,0,0}};
void dfs(int x,int y,int nwcnt){
if(x==n+1){
if(cnt<nwcnt){
memcpy(ans,nwans,sizeof(nwans));
cnt=nwcnt;
}
return ;
}
if(nwcnt+2<mx[x][y]){
return ;
}
mx[x][y]=max(mx[x][y],nwcnt);
int nx=x,ny=y+1;
if(ny==m+1){
ny=1,nx++;
}
dfs(nx,ny,nwcnt);
if(nwans[x][y]!='.'){
return ;
}
for(int f=0;f<4;f++){
bool ok=true;
for(int i=0;i<4;i++){
int nx=x+dx[f][i],ny=y+dy[f][i];
if(nx<1||nx>n||ny<1||ny>m||nwans[nx][ny]!='.'){
ok=false;
break;
}
}
if(!ok){
continue;;
}
for(int i=0;i<4;i++){
int nx=x+dx[f][i],ny=y+dy[f][i];
nwans[nx][ny]=(nwcnt+'A');
}
nwans[x][y]=(nwcnt+'A');
dfs(nx,ny,nwcnt+1);
for(int i=0;i<4;i++){
int nx=x+dx[f][i],ny=y+dy[f][i];
nwans[nx][ny]='.';
}
nwans[x][y]='.';
}
return ;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
ans[i][j]=nwans[i][j]='.';
}
}
dfs(1,1,0);
cout<<cnt<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<ans[i][j];
}
cout<<endl;
}
return 0;
}