#include <bits/stdc++.h>
#include <ext/numeric>
using namespace std;
using namespace __gnu_cxx;

#define sz(x) (int)x.size()

int n,m;
char arr[1010][1010];
int vis[1010][1010];
int num[1010][1010];
int visId;
int cnt[1010];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};

void dfs(int r,int c){
    if(r<0||c<0||r>=n||c>=m)return;
    if(vis[r][c]||arr[r][c]=='*')return;
    vis[r][c]=1;
    num[r][c]=visId;
    cnt[visId]++;
    for(int i=0;i<4;i++)
        dfs(r+dx[i],c+dy[i]);
    return;
}

int main() {
#ifndef ONLINE_JUDGE
    freopen("input.txt", "rt", stdin);
   // freopen("output.txt", "wt", stdout);
#endif
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            scanf(" %c",&arr[i][j]);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++){
            if(vis[i][j]||arr[i][j]=='*')continue;
            visId++;
            dfs(i,j);
        }

    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(arr[i][j]=='.'){
                printf(".");
                continue;
            }
            set<int> st;
            if(i>0&&arr[i-1][j]=='.')st.insert(num[i-1][j]);
            if(i<n-1&&arr[i+1][j]=='.')st.insert(num[i+1][j]);
            if(j>0&&arr[i][j-1]=='.')st.insert(num[i][j-1]);
            if(j<m-1&&arr[i][j+1]=='.')st.insert(num[i][j+1]);
            int ans=1;
            for(set<int>::iterator it=st.begin();it!=st.end();it++)
                ans+=cnt[*it];
            printf("%d",ans%10);
        }
        cout<<"\n";
    }
}