#include #include #include #include #include #include #define SIZE(x) ((int) (x).size()) #define REP(i, n) for (int i = 0; i < (int) (n); ++i) using namespace std; #define MAXN 107 typedef pair PI; int n, m; char B[MAXN][MAXN]; char R[MAXN][MAXN]; int dx[4] = {1, 0, -1, 0}; int dy[4] = {0, 1, 0, -1}; PI DFS1(int y, int x, bool parity) { R[y][x] = 'v'; PI res = PI(parity, !parity); REP(d, 4) { int ny = y + dy[d]; int nx = x + dx[d]; if (0 <= ny && ny < n && 0 <= nx && nx < m && R[ny][nx] == '?') { PI t = DFS1(ny, nx, !parity); res.first += t.first; res.second += t.second; } } return res; } void DFS_same(int y, int x) { R[y][x] = 'A'; REP(d, 4) { int ny = y + dy[d]; int nx = x + dx[d]; if (0 <= ny && ny < n && 0 <= nx && nx < m && R[ny][nx] == 'v') { DFS_same(ny, nx); } } } void DFS_chess(int y, int x, bool parity) { R[y][x] = (!parity) ? 'B' : 'A'; REP(d, 4) { int ny = y + dy[d]; int nx = x + dx[d]; if (0 <= ny && ny < n && 0 <= nx && nx < m && R[ny][nx] == 'v') { DFS_chess(ny, nx, !parity); } } } int main() { while (scanf("%d%d", &n, &m), n) { REP(i, n) scanf("%s", B[i]); REP(i, n) REP(j, m) if (B[i][j] == 'X') R[i][j] = 'X'; else R[i][j] = '?'; REP(i, n) REP(j, m) if (R[i][j] == '?') { PI x = DFS1(i, j, false); if (x.first == x.second) { DFS_same(i, j); } else { if (x.first > x.second) DFS_chess(i, j, true); else DFS_chess(i, j, false); } } REP(i, n) { REP(j, n) putchar(R[i][j]); putchar('\n'); } putchar('\n'); } }