//O(n ^ 3 * m * 10)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define N (42)
#define M (402)
const int inf = 400 * 40 + 10;
int n, m;
int f[N][N][M][11], g[N][N][M][11];
char a[N][M];

void get(int i, int j, int k, int l){
    if (inf != f[i][j][k][l] || l >= 10) return ;
    get(i,j,k,l+1);
    f[i][j][k][l] = f[i][j][k][l+1];
    g[i][j][k][l] = i - 1;
    for (int r = i, cnt = 0; r <= j; ++r){
        cnt += a[r][k] != l;
        get(i,r,k+1,0);
        get(r+1,j,k,l+1);
        if (cnt + f[i][r][k+1][0] + f[r+1][j][k][l+1] < f[i][j][k][l]){
            f[i][j][k][l] = cnt + f[i][r][k+1][0] + f[r+1][j][k][l+1];
            g[i][j][k][l] = r;
        }
    }
}
void form(int i, int j, int k, int l){
    //printf("%d %d %d %d %d\n", i, j, k, l, f[i][j][k][l]);
    if (f[i][j][k][l] == 0) return ;
    int tmp = g[i][j][k][l];
    for (int t = i; t <= tmp; t++){
        a[t][k] = l;
    }
    form(i,tmp,k+1,0);
    form(tmp+1,j,k,l+1);
}
int main(){
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++){
        scanf("%s", a[i] + 1);
        for (int j = 1; j <= m; j++){
            a[i][j] -= '0';
        }
    }
    for (int i = 1; i <= n; i++){
        for (int j = i; j <= n; j++){
            for (int k = 1; k <= m; k++){
                for (int l = 0; l <= 10; l++){
                    f[i][j][k][l] = inf;
                }
            }
        }
    }
    get(1,n,1,0);
    form(1,n,1,0);
    for (int i = 1; i <= n; i++){
        for (int j = 1; j <= m; j++){
            printf("%d", a[i][j]);
        }
        printf("\n");
    }
    //printf("%d\n", f[1][n][1][0]);
}
