#include <stdio.h>
int main(int argc, char const* argv[]) {
int a, b;
scanf("%d %d", &a, &b);
getchar(); // 消耗掉输入缓冲区中的换行符
char c[a][b];
char d[a][b]; // 保存修改后的数据
// 输入矩阵的数据
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
scanf("%c", &c[i][j]);
d[i][j] = c[i][j];
}
getchar(); // 消耗掉每行末尾的换行符
}
// 修改数据,扫出雷的个数
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
int count = 0;
if (c[i][j] == '*') { // 扫到雷就跳过
continue;
} else {
// 检查8个方向
if (i - 1 >= 0 && j - 1 >= 0 && c[i - 1][j - 1] == '*') count++; // 左上
if (i - 1 >= 0 && c[i - 1][j] == '*') count++; // 上
if (i - 1 >= 0 && j + 1 < b && c[i - 1][j + 1] == '*') count++; // 右上
if (j - 1 >= 0 && c[i][j - 1] == '*') count++; // 左
if (j + 1 < b && c[i][j + 1] == '*') count++; // 右
if (i + 1 < a && j - 1 >= 0 && c[i + 1][j - 1] == '*') count++; // 左下
if (i + 1 < a && c[i + 1][j] == '*') count++; // 下
if (i + 1 < a && j + 1 < b && c[i + 1][j + 1] == '*') count++; // 右下
d[i][j] = count + '0';
}
}
}
// 输出矩阵的数据(每个数输出域宽为5)
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
printf("%c", d[i][j]); // 域宽为5
}
printf("\n");
}
return 0;
}