# 法1:
# n,m=list(map(int,input().split()))
# mine=[]
# #创建一个(n+2)行(m+2)列的扫雷矩阵,所有值初始化为.
# for i in range(n+2):
# row=['.']*(m+2)
# mine.append(row)
# # 为矩阵的n行m列赋值(键盘输入)
# for i in range(1,n+1):
# row=str(input().strip())
# for j in range(1,m+1):
# mine[i][j]=row[j-1]
# # 遍历矩阵的矩阵的n行m列
# for i in range(1,n+1):
# for j in range(1,m+1):
# counts=0
# if mine[i][j]=="*":
# continue
# # 计算八个方向雷的个数
# else:
# if mine[i][j-1]=="*":
# counts+=1
# if mine[i][j+1]=="*":
# counts+=1
# if mine[i-1][j]=="*":
# counts+=1
# if mine[i+1][j]=="*":
# counts+=1
# if mine[i-1][j-1]=="*":
# counts+=1
# if mine[i-1][j+1]=="*":
# counts+=1
# if mine[i+1][j-1]=="*":
# counts+=1
# if mine[i+1][j+1]=="*":
# counts+=1
# mine[i][j]=str(counts)
# # 输出矩阵
# for i in range(1,n+1):
# for j in range(1,m+1):
# print(mine[i][j],end='')
# print()
# 法2:
# 读取输入
n, m = map(int, input().split())
grid = [input().strip() for _ in range(n)]
# 初始化计数矩阵(记录每个位置周围的雷数)
count = [[0] * m for _ in range(n)]
# 定义八个方向:上、下、左、右、左上、右上、左下、右下
directions = [
(-1, -1), (-1, 0), (-1, 1),
(0, -1), (0, 1),
(1, -1), (1, 0), (1, 1)
]
# 第一遍遍历:统计雷的影响
for i in range(n):
for j in range(m):
if grid[i][j] == '*': # 发现雷
for dx, dy in directions:
ni, nj = i + dx, j + dy # 计算邻格坐标
# 检查是否在矩阵范围内
if 0 <= ni < n and 0 <= nj < m:
count[ni][nj] += 1 # 该位置雷计数+1
# 第二遍遍历:构建结果矩阵
result = []
for i in range(n):
line = ''
for j in range(m):
if grid[i][j] == '*':
line += '*' # 雷位置保持不变
else:
line += str(count[i][j]) # 非雷位置输出雷计数
result.append(line)
# 输出结果
for line in result:
print(line)