#include static int a, b, qn, q[4000000][2], stack[4000000][2]; static char t[2000][2000], volt[2000][2000], sol[2000][2000]; void dfs(int i, int j, int m, int *f, int *g) { int sn = 1, x, y; stack[0][0] = i; stack[0][1] = j; while (sn) { x = stack[--sn][0]; y = stack[sn][1]; if (t[x][y] != '.' || volt[x][y]) continue; volt[x][y] = m; q[qn][0] = x; q[qn++][1] = y; if ((x+y)&1) ++*f; else ++*g; #define push(a, b) { stack[sn][0] = a; stack[sn++][1] = b; } if (x > 0) push(x-1, y); if (y > 0) push(x, y-1); if (x < a-1) push(x+1, y); if (y < b-1) push(x, y+1); } } int main(void) { for (;;) { int i, j, k, l, m = 0, x, y; scanf("%d %d\n", &a, &b); if (a == 0) return 0; for (i = 0; i < a; i++) { gets(t[i]); for (j = 0; j < b; j++) { volt[i][j] = 0; } } for (i = 0; i < a; i++) { for (j = 0; j < b; j++) { if (t[i][j] == '.' && !volt[i][j]) { int f = 0, g = 0; qn = 0; dfs(i, j, ++m, &f, &g); for (k = 0; k < qn; k++) { x = q[k][0]; y = q[k][1]; if ((x+y)&1) sol[x][y] = f > g ? 'B' : 'A'; else sol[x][y] = f < g ? 'B' : 'A'; } } } } for (i = 0; i < a; i++) { for (j = 0; j < b; j++) { putchar(t[i][j] == '.' ? sol[i][j] : t[i][j]); } putchar('\n'); } putchar('\n'); } }