#!/usr/bin/env python3
import sys

def is_adj(X, i, j):
    return any(0 <= ni < len(X) and 0 <= nj < len(X[0]) and X[ni][nj] == 1
               for (ni, nj) in [(i-1,j),(i+1,j),(i,j-1),(i,j+1)])

n, m = map(int, input().split())
target = [list(map(int, input())) for _ in range(n)]

(A, B, C) = M = [[[0]*m for _ in range(n)] for _ in range(3)]
if min(n, m) == 1: # special case
    (lo, hi) = (0, 1)
    for r in range(n):
        for c in range(m):
            tc = target[r][c]
            while hi-lo < tc or 3-hi+r+c >= n+m-1: hi += 1
            while hi-lo > tc: lo += 1
            if hi > 3:
                print('impossible')
                sys.exit(0)
            for x in range(lo, hi):
                M[x][r][c] = 1
else: # general case, both dims >= 2
    (l, r, t, b) = (-1, m-2, 0, n-3)
    while True:
        if l >= r: break
        for i in range(max(l, 0), r+1): A[t][i] = 1
        l += 2
        if t >= b: break
        for i in range(t, b+1): A[i][r] = 1
        t += 2
        if l >= r or b == t-1: break
        for i in range(r, l-1, -1): A[b][i] = 1
        r -= 2
        if t >= b: break
        for i in range(b, t-1, -1): A[i][l] = 1
        b -= 2
    for i in range(n-1):
        for j in range(m):
            B[i][j] = 1-A[i][j]
    C[n-1] = [1]*m
        
for (X, sym) in zip(M, 'ABC'):
    for i in range(n):
        print(''.join(['.',sym][X[i][j] or target[i][j] > 1 and is_adj(X, i, j)] for j in range(m)))
    print()


