#include <bits/stdc++.h>
using namespace std;
char g[1000][1010];
int c[1000][1000] = {}, ci[1000002] = {}, n, m, cc = 0;
void dfs(int i, int j) {
  if (i < 0 || j < 0 || i >= n || j >= m || g[i][j] == '*' || c[i][j]) return;
  ci[cc]++;
  c[i][j] = cc;
  dfs(i + 1, j);
  dfs(i - 1, j);
  dfs(i, j + 1);
  dfs(i, j - 1);
}
int main() {
  int i, j;
  scanf("%d%d", &n, &m);
  for (i = 0; i < n; i++) scanf("%s", g[i]);
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      if (g[i][j] == '.' && !c[i][j]) {
        ++cc;
        dfs(i, j);
      }
    }
  }
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      if (g[i][j] == '.')
        putchar('.');
      else {
        int total = 1;
        set<int> S;
        if (i && g[i - 1][j] == '.') S.insert(c[i - 1][j]);
        if (j && g[i][j - 1] == '.') S.insert(c[i][j - 1]);
        if (i + 1 < n && g[i + 1][j] == '.') S.insert(c[i + 1][j]);
        if (j + 1 < m && g[i][j + 1] == '.') S.insert(c[i][j + 1]);
        for (int u : S) {
          total += ci[u];
        }
        printf("%d", total % 10);
      }
    }
    putchar('\n');
  }
  return 0;
}
