#include <bits/stdc++.h>
using namespace std;
vector<string> a;
vector<vector<int> > ans;
int n, m, cur_color = 1, res;
void dfs(const int& x, const int& y) {
  if (x < 0 || x >= n || y < 0 || y >= m) return;
  if (ans[x][y] > 0) return;
  if (a[x][y] == '*') return;
  res++;
  ans[x][y] = cur_color;
  dfs(x - 1, y);
  dfs(x + 1, y);
  dfs(x, y + 1);
  dfs(x, y - 1);
}
int main() {
  vector<int> color(1, 0);
  (cin >> n >> m).get();
  a.resize(n);
  for (int i = 0; i < n; i++) getline(cin, a[i]);
  ans.assign(n, vector<int>(m, 0));
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (a[i][j] == '.') {
        res = 0;
        dfs(i, j);
        color.push_back(res);
        cur_color++;
      }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++)
      if (a[i][j] == '.')
        cout << ".";
      else {
        int r = 1;
        set<pair<int, int> > st;
        if (i > 0) st.insert({ans[i - 1][j], color[ans[i - 1][j]]});
        if (i < n - 1) st.insert({ans[i + 1][j], color[ans[i + 1][j]]});
        if (j > 0) st.insert({ans[i][j - 1], color[ans[i][j - 1]]});
        if (j < m - 1) st.insert({ans[i][j + 1], color[ans[i][j + 1]]});
        for (auto i : st) r += i.second;
        cout << r % 10;
      }
    cout << endl;
  }
}
