#include<iostream>
#include<string>
using namespace std;
int inside(int x, int y, int row, int col){
if(x > row - 1 || x < 0 || y > col - 1 || y < 0)return 0;
else return 1;
}
int main(){
int row, col;
int instance = 1;
int row_set [] = {1, 1, 1, -1, -1, -1, 0, 0};
int col_set [] = {1, -1, 0, 1, -1, 0, 1, -1};
while(cin>>row){
cin>>col;
if(row == 0 || col == 0){
cout<<endl;
continue;
}
char ch[row][col];
char sol[row][col];
char temp;
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
cin>>temp;
if(temp == '\n')j--;
ch[i][j] = temp;
}
}
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
if(ch[i][j] == '*')sol[i][j] = '*';
else{
char mines = '0';
for(int k = 0; k < 8; k++){
if(inside(i + row_set[k], j + col_set[k], row, col) && ch[i + row_set[k]][j + col_set[k]] == '*')mines += 1;
}
sol[i][j] = (char)mines;
}
}
}
cout<<endl;
cout<<"Field #"<<instance<<":"<<endl;
instance++;
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
cout<<sol[i][j];
}
cout<<endl;
}
cout<<endl;
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgaW5zaWRlKGludCB4LCBpbnQgeSwgaW50IHJvdywgaW50IGNvbCl7CglpZih4ID4gcm93IC0gMSB8fCB4IDwgMCB8fCB5ID4gY29sIC0gMSB8fCB5IDwgMClyZXR1cm4gMDsKCWVsc2UgcmV0dXJuIDE7Cn0KCmludCBtYWluKCl7CiBpbnQgcm93LCBjb2w7CiBpbnQgaW5zdGFuY2UgPSAxOwogaW50IHJvd19zZXQgW10gPSB7MSwgMSwgMSwgLTEsIC0xLCAtMSwgMCwgMH07CiBpbnQgY29sX3NldCBbXSA9IHsxLCAtMSwgMCwgMSwgLTEsIDAsIDEsIC0xfTsKIHdoaWxlKGNpbj4+cm93KXsKCSBjaW4+PmNvbDsKCSBpZihyb3cgPT0gMCB8fCBjb2wgPT0gMCl7CgkJIGNvdXQ8PGVuZGw7CgkJIGNvbnRpbnVlOwoJIH0JCQoJIGNoYXIgY2hbcm93XVtjb2xdOwoJIGNoYXIgc29sW3Jvd11bY29sXTsKCSBjaGFyIHRlbXA7CgkgZm9yKGludCBpID0gMDsgaSA8IHJvdzsgaSsrKXsKCQkgZm9yKGludCBqID0gMDsgaiA8IGNvbDsgaisrKXsKCQkJIGNpbj4+dGVtcDsKCQkJIGlmKHRlbXAgPT0gJ1xuJylqLS07CgkJCSBjaFtpXVtqXSA9IHRlbXA7CgkJIH0KCSB9CgkgZm9yKGludCBpID0gMDsgaSA8IHJvdzsgaSsrKXsKCQkgZm9yKGludCBqID0gMDsgaiA8IGNvbDsgaisrKXsKCQkJIGlmKGNoW2ldW2pdID09ICcqJylzb2xbaV1bal0gPSAnKic7CgkJCSBlbHNlewoJCQkJIGNoYXIgbWluZXMgPSAnMCc7CgkJCQkgZm9yKGludCBrID0gMDsgayA8IDg7IGsrKyl7CgkJCQkJaWYoaW5zaWRlKGkgKyByb3dfc2V0W2tdLCBqICsgY29sX3NldFtrXSwgcm93LCBjb2wpICYmIGNoW2kgKyByb3dfc2V0W2tdXVtqICsgY29sX3NldFtrXV0gPT0gJyonKW1pbmVzICs9IDE7CgkJCQkgfQoJCQkJIHNvbFtpXVtqXSA9IChjaGFyKW1pbmVzOwoJCQkgfQoJCSB9CgkgfQoJIGNvdXQ8PGVuZGw7CgkgY291dDw8IkZpZWxkICMiPDxpbnN0YW5jZTw8IjoiPDxlbmRsOwoJIGluc3RhbmNlKys7CgkgZm9yKGludCBpID0gMDsgaSA8IHJvdzsgaSsrKXsKCQkgZm9yKGludCBqID0gMDsgaiA8IGNvbDsgaisrKXsKCQkJIGNvdXQ8PHNvbFtpXVtqXTsKCQl9CgkJY291dDw8ZW5kbDsKCSB9CgkgY291dDw8ZW5kbDsKIH0KIHJldHVybiAwOwp9Cg==