// Zetva - Djerek
// Dobro rjesenje
//

#include <cstdio>
#include <cstring>

using namespace std;

const int MAX=50;

int n, m;
char p[MAX][MAX+1];
int d[MAX][MAX];
int npolja;
int size[10];
int label[10];

int visit(int x, int y, int k) {
  if (x < 0 || x >= n || y < 0 || y >= m)
      return 0;
  if (d[x][y] != -1)
    return 0;
  if (p[x][y] != '1')
    return 0;
  d[x][y] = k;
  return 1+visit(x-1, y, k)+visit(x+1, y, k)+visit(x, y-1, k)+visit(x, y+1, k);
}

void solve() {
  memset(d, -1, sizeof d);
  npolja = 0;
  for (int i=0; i<n; i++)
    for (int j=0; j<m; j++)
      if (p[i][j] == '1' && d[i][j] == -1) {
        size[npolja] = visit(i, j, npolja);
        npolja++;
      }

  for (int i=0; i<npolja; i++) {
    label[i] = 1;
    for (int j=0; j<npolja; j++)
      if (i!=j && size[j] < size[i])
        label[i]++;
  }

  for (int i=0; i<n; i++)
    for (int j=0; j<m; j++)
      if (p[i][j] == '1')
        p[i][j] = char('0'+label[d[i][j]]);
}

int main() {
  scanf("%d%d", &n, &m);
  for (int i=0; i<n; i++)
    scanf("%s", p[i]);

  solve();

  for (int i=0; i<n; i++)
    printf("%s\n", p[i]);

  return 0;
}
