#include using namespace std; int hasMine(char** &matrix, const size_t& row, const size_t& col, const size_t& rows, const size_t& cols); char countMines(char** &matrix, const size_t& row, const size_t& col, const size_t& rows, const size_t& cols); int main() { size_t rows, cols; cin >> rows >> cols; char** mineField = new char *[rows]; for (size_t i = 0; i < rows; ++i) { mineField[i] = new char[cols]; for (size_t j = 0; j < cols; ++j) cin >> mineField[i][j]; } for (size_t i = 0; i < rows; ++i) { for (size_t j = 0; j < cols; ++j) mineField[i][j] = countMines(mineField, i, j, rows, cols); } for (size_t i = 0; i < rows; ++i) { for (size_t j = 0; j < cols; ++j) cout << mineField[i][j]; cout << endl; delete[] mineField[i]; } delete[] mineField; return 0; } int hasMine(char** &matrix, const size_t& row, const size_t& col, const size_t& rows, const size_t& cols) { if (row >= rows || col >= cols) return 0; return matrix[row][col] == '!' ? 1 : 0; } char countMines(char** &matrix, const size_t& row, const size_t& col, const size_t& rows, const size_t& cols) { char mines = '0' + hasMine(matrix, row-1, col-1, rows, cols) + hasMine(matrix, row , col-1, rows, cols) + hasMine(matrix, row+1, col-1, rows, cols) + hasMine(matrix, row-1, col , rows, cols) + hasMine(matrix, row , col , rows, cols) + hasMine(matrix, row+1, col , rows, cols) + hasMine(matrix, row-1, col+1, rows, cols) + hasMine(matrix, row , col+1, rows, cols) + hasMine(matrix, row+1, col+1, rows, cols); return mines; }