# 输入整数n,m
n,m = map(int,input().split())

# 创建二维数组,table是(n + 2)* (m + 2)的数组,包含原有边界,省去边界处理

table = []

# 添加顶部行
table.append([0] * (m + 2))

# 添加元素,并将* .转化为int型1,0,方便进行统计,周围八领域有雷就加一
for i in range(n):
    # 注意,每一行均需左右加两个0,包住原边界
    h =  [0] + [1 if ch == "*" else 0 for ch in input().strip()] + [0]
    table.append(h)

# 添加底部行
table.append([0] * (m + 2))

# 创建以当前值为原点的八领域,横坐标向右为正,纵坐标向下为正
dx = [-1,-1,-1,0,0,1,1,1]
dy = [-1,0,1,-1,1,-1,0,1]

# 定义存储结果的二维数组
result = []

# 进入待处理二维数组进行公示计算
for i in range(1,n+1):
    # 创建一维数组,记录处理后的每行元素
    line = []
    for j in range(1,m+1):
        if table[i][j] == 1:
            line.append("*")
        else:
            cnt = 0
            # 计算周围雷数量
            for h in range(8):
                cnt = cnt + table[i + dx[h]][j + dy[h]]
            line.append(str(cnt))
    # 将处理后的每一行元素添加到二维结果列表里
    result.append(line)

# 使用join元素导出符合标准的结果
for row in result:
    print("".join(row))
            
 

困难

1.需要考虑边界处理,可通过四周包一圈不是雷的解决,

2.把雷的符号转化为0,1的,这样可通过八领域加法,完成雷个数的确定。

3.二维数组的使用:二维数组存入待处理数据,二维数组存入处理后的数据

4.使用join处理成题目要求的格式,join只能处理字符串。