#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define DEBUG(x) cout << '>' << #x << ':' << x << endl; #define FOR(i, b) for (int i = 0; i < (b); ++i) #define FOR2(i, a, b) for (int i = (a); i > (b); --i) inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; } const int INF = 1<<29; typedef long long ll; #define MAXN 111 int N,M,A,B; char m[MAXN][MAXN]; void get(int x,int y){ if(x<0||y<0||x==N||y==M||m[x][y]!='.') return; if((x+y)%2){ A++; m[x][y]='N'; } else{ B++; m[x][y]='M'; } get(x-1,y); get(x+1,y); get(x,y-1); get(x,y+1); } void go(int x,int y){ if(m[x][y]!='.') return; A=0; B=0; get(x,y); int i,j; if((A%2==0&&B%2==0)||A==B){ FOR(i,N) FOR(j,M) if(m[i][j]=='N'||m[i][j]=='M') m[i][j]='A'; } else{ if(A>B){ FOR(i,N) FOR(j,M) if(m[i][j]=='N') m[i][j]='B'; FOR(i,N) FOR(j,M) if(m[i][j]=='M') m[i][j]='A'; } else{ FOR(i,N) FOR(j,M) if(m[i][j]=='N') m[i][j]='A'; FOR(i,N) FOR(j,M) if(m[i][j]=='M') m[i][j]='B'; } } } int main() { int i,j; while(true){ scanf("%d%d",&N,&M); if(N+M==0) break; FOR(i,N) scanf("%s",m[i]); FOR(i,N) FOR(j,M) go(i,j); FOR(i,N) printf("%s\n",m[i]); printf("\n"); } return 0; }