import java.util.Scanner;
class GameMap {
private int width, height;
private int[][] map;
GameMap(int height, int width) {
this.height=height;
this.width=width;
map =new int[height][width];
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
/**
* @return map value if out inside return -1
*/
public int get(int x,int y) {
if(x>=height||y>=width||x<0||y<0){
return -1;
}
return map[x][y];
}
public void set(int x,int y,int value){
map[x][y]=value;
}
}
class MineSweeper {
private GameMap mapData;
public final char MINE = '*';
MineSweeper(GameMap map) {
this.mapData = map;
}
public int findXY(int x, int y) {
int count = 0;
if (mapData.get(x, y) == 0) {
return -1;
}
//right
if (mapData.get(x + 1, y) == 0) {
count++;
}
//down
if (mapData.get(x, y + 1) == 0) {
count++;
}
//left
if (mapData.get(x - 1, y) == 0) {
count++;
}
//up
if (mapData.get(x, y - 1) == 0) {
count++;
}
//right down
if (mapData.get(x + 1, y + 1) == 0) {
count++;
}
//left down
if (mapData.get(x - 1, y + 1) == 0) {
count++;
}
//left up
if (mapData.get(x - 1, y - 1) == 0) {
count++;
}
//right up
if (mapData.get(x + 1, y - 1) == 0) {
count++;
}
return count;
}
char[][] resultData() {
char[][] dis = new char[mapData.getHeight()][mapData.getWidth()];
for (int i = 0; i < dis.length; i++) {
for (int j = 0; j < dis[i].length; j++) {
int num = findXY(i, j);
if (num != -1) {
dis[i][j] = (char) (num + '0');
} else {
dis[i][j] = MINE;
}
}
}
return dis;
}
}
class RunGame {
public GameMap gameMap;
private void setData(){
Scanner scanner = new Scanner(System.in);
int width, height;
height = scanner.nextInt();
width = scanner.nextInt();
gameMap = new GameMap(height, width);
for (int i = 0; i < height; i++) {
String a=scanner.next();
if(a.length()!=width){
throw new IllegalArgumentException("input error");
}
for (int j = 0; j < width; j++) {
char val=a.charAt(j);
if (val=='*'){
gameMap.set(i,j,0);
}
if (val=='?'){
gameMap.set(i,j,1);
}
}
}
}
public void result(){
StringBuilder stringBuilder=new StringBuilder();
MineSweeper mineSweeper = new MineSweeper(gameMap);
char[][] data=mineSweeper.resultData();
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[i].length; j++) {
stringBuilder.append(data[i][j]);
}
stringBuilder.append('\n');
}
System.out.print(stringBuilder);
}
public void run() {
setData();
result();
}
}
public class Main {
public static void main(String[] args) {
RunGame runGame = new RunGame();
runGame.run();
}
}