← Home
#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;
}