import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class MinesweeperMacaw { public static char[][] grid; public static char[][] modGrid; public static int unknowns = 0; public static boolean solved = false; public static HashMap> unknownLocations = new HashMap<>(); public static void main(String[] args) { Scanner sc = new Scanner(System.in); int size = sc.nextInt(); int macaws = sc.nextInt(); grid = new char[size][size]; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid.length; j++) { grid[i][j] = sc.next().charAt(0); if (grid[i][j] == '.') { ArrayList l = new ArrayList<>(); l.add(i); l.add(j); unknownLocations.put(unknowns, l); unknowns++; } } } modGrid = new char[size][size]; for (int i = 0; i < size; i++) { modGrid[i] = grid[i].clone(); } if (unknowns != 0) { placeMacaws(0, macaws); } printGrid(grid); sc.close(); } public static void placeMacaws(int index, int macawsLeft) { if (macawsLeft == 0) { if (valid(modGrid)) { for (int i = 0; i < modGrid.length; i++) { grid[i] = modGrid[i].clone(); } solved = true; } return; } if (solved) return; if (index == unknowns) { return; } int a = unknownLocations.get(index).get(0); int b = unknownLocations.get(index).get(1); modGrid[a][b] = 'M'; placeMacaws(index + 1, macawsLeft - 1); modGrid[a][b] = '.'; placeMacaws(index + 1, macawsLeft); } public static boolean valid(char[][] input) { for (int i = 0; i < input.length; i++) { for (int j = 0; j < input[i].length; j++) { char c = input[i][j]; if (Character.isDigit(c)) { int val = c - '0'; int num = 0; for (int m = -1; m < 2; m++) { for (int n = -1; n < 2; n++) { if (i + m >= 0 && i + m < input.length && j + n >= 0 && j + n < input[0].length) { if (input[i + m][j + n] == 'M') { num++; } } } } if (num != val) { return false; } } } } return true; } public static void printGrid(char[][] input) { for (int i = 0; i < input.length; i++) { String out = ""; for (int j = 0; j < input[i].length - 1; j++) { out = out + input[i][j]; out += " "; } out += input[i][input[i].length - 1]; System.out.println(out); } } }