You are given an H × W grid.
The squares in the grid are described by H strings, S_1,...,S_H.
The j-th character in the string S_i corresponds to the square at the i-th row from the top and j-th column from the left (1 \leq i \leq H,1 \leq j \leq W).
`.` stands for an empty square, and `#` stands for a square containing a bomb.

Dolphin is interested in how many bomb squares are horizontally, vertically or diagonally adjacent to each empty square.
(Below, we will simply say "adjacent" for this meaning. For each square, there are at most eight adjacent squares.)
He decides to replace each `.` in our H strings with a digit that represents the number of bomb squares adjacent to the corresponding empty square.

Print the strings after the process.

Constraints

* 1 \leq H,W \leq 50
* S_i is a string of length W consisting of `#` and `.`.

Input

Input is given from Standard Input in the following format:


H W
S_1
:
S_H


Output

Print the H strings after the process.
The i-th line should contain a string T_i of length W, where the j-th character in T_i corresponds to the square at the i-th row from the top and j-th row from the left in the grid (1 \leq i \leq H, 1 \leq j \leq W).

Examples

Input

3 5
.....
.#.#.
.....


Output

11211
1#2#1
11211


Input

3 5


Output




Input

6 6
.
.#.##
.#
.#..#.
.##..
.#...


Output

3
8#7##
5#
4#65#2
5##21
4#310
#include <bits/stdc++.h>
using namespace std;

const int oo=-10;//优化：定义常量oo小于-8，给有雷的格子标注，这样的话无论下面怎样加也不会大于0
int n,m,a[52][52];
char c;

int main()
{
    cin>>n>>m;//读入
    for(int i=1;i<=n;i++)//从1开始，有0行0列作围墙
        for(int j=1;j<=m;j++)
        {
            cin>>c;//一个一个读入矩阵的各个字符
            if(c=='#')//如果有雷
            {
                a[i][j]=oo;//标注出雷格
                a[i-1][j-1]++;//以下八行给雷格的周围的所有格子的雷数加一
                a[i-1][j]++;
                a[i-1][j+1]++;
                a[i][j-1]++;
                a[i][j+1]++;
                a[i+1][j-1]++;
                a[i+1][j]++;
                a[i+1][j+1]++;
            }
        }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            if(a[i][j]<0)cout<<"#";//标注的用处：如果小于0就是有雷的格子
            else cout<<a[i][j];//否则输出雷数
        cout<<endl；//省去了死亡换行的困扰
    }   
}