#include #include #include #include #include #include #include #include #include #include using namespace std; #define FI first #define SE second #define X first #define Y second #define ST first #define ND second #define MP make_pair #define PB push_back typedef vector VI; typedef pair PII; typedef long long LL; typedef long double LD; typedef double D; #define REP(i,n) for(int i=0;i<(n);i++) #define FOR(i,a,b) for(int i=(a);i<=(b);i++) #define FORD(i,a,b) for(int i=(a);i>=(b);i--) #define FORE(a,b) for(VAR(a,(b).begin());a!=(b).end();a++) #define VAR(a,b) __typeof(b) a=(b) #define SIZE(a) ((int)(a).size()) #define ALL(x) (x).begin(),(x).end() #define CLR(x,a) memset(x,a,sizeof(x)) const int M = 113; char s[M][M]; int vis[M*M], skoj[M*M]; int n,m, xx[4]={-1,1,0,0},yy[4]={0,0,-1,1}; int dfs(int e) { int i = e / M; int j = e % M; vis[e] = 1; REP(k, 4) if(i+xx[k] >= 0 && i+xx[k] < n && j+yy[k]>=0 && j+yy[k] < m && s[i+xx[k]][j+yy[k]] == '.' && (skoj[(i+xx[k])*M+j+yy[k]] == -1 || !vis[skoj[(i+xx[k])*M+j+yy[k]]] && dfs(skoj[(i+xx[k])*M+j+yy[k]]))) { skoj[e] = (i+xx[k]) * M + j+yy[k]; skoj[(i+xx[k]) * M + j+yy[k]] = e; return 1; } return 0; } void dfs2(int e) { int i = e / M; int j = e % M; vis[e] = 1; s[i][j] = 'B'; REP(k, 4) if(i+xx[k] >= 0 && i+xx[k] < n && j+yy[k]>=0 && j+yy[k] < m && s[i+xx[k]][j+yy[k]] == '.' && !vis[skoj[(i+xx[k])*M+j+yy[k]]]) { s[i][j] = 'B'; s[i+xx[k]][j+yy[k]] = 'A'; dfs2(skoj[(i+xx[k])*M+j+yy[k]]); } return ; } int main() { while(scanf("%d %d",&n,&m)==2 && n) { REP(i, n) scanf("%s", s[i]); REP(i, n) REP(j,m) skoj[i*M+j] = -1; int change = 1; while(change) { change = 0; REP(i,n) REP(j,m) vis[i*M+j] = 0; REP(i, n) REP(j,m) if((i+j)%2 == 0 && s[i][j] == '.' && !vis[i*M+j] && skoj[i*M+j] == -1 && dfs(i*M+j)) change = 1; } REP(i,n) REP(j,m) vis[i*M+j] = 0; REP(i, n) REP(j,m) if(s[i][j] == '.' && !vis[i*M+j] && skoj[i*M+j] == -1) dfs2(i*M+j); REP(i, n) REP(j, m) if(s[i][j] == '.') s[i][j] = 'A'; REP(i, n) puts(s[i]); puts(""); } return 0; }