using System; using System.Collections.Generic; using System.Linq; public class Program { public static void Main() { var sizes = Console.ReadLine().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray(); var r = sizes[0]; var c = sizes[1]; var matrix = new List>(); FillTheMatrixIn(r, c, matrix); string input; while ((input = Console.ReadLine()) != "Nuke it from orbit") { var arg = input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray(); var hitRow = arg[0]; var hitCol = arg[1]; var radius = arg[2]; VerticalHitting(r, matrix, hitRow, hitCol, radius); HorizontalHitting(matrix, hitRow, hitCol, radius); } for (int rowIndex = 0; rowIndex < r; rowIndex++) { Console.WriteLine(string.Join(" ", matrix[rowIndex])); } } private static void HorizontalHitting(List> matrix, int hitRow, int hitCol, int radius) { var length = radius * 2 + 1; var start = hitCol - radius; if (start < 0) { start = 0; } if (start + length >= matrix[hitRow].Count) { length -= start + length - matrix[hitRow].Count; } matrix[hitRow].RemoveRange(start, length); } private static void VerticalHitting(int r, List> matrix, int hitRow, int hitCol, int radius) { for (int k = radius; k > 0; k--) { if (matrix[hitRow - k].Count >= hitCol) { if (hitRow - k >= 0 && hitCol < matrix[hitRow - k].Count) { matrix[hitRow - k].RemoveAt(hitCol); } if (hitRow + k < matrix.Count && hitCol < matrix[hitRow + k].Count) { matrix[hitRow + k].RemoveAt(hitCol); } } } } private static void FillTheMatrixIn(int r, int c, List> matrix) { var number = 1; for (int i = 0; i < r; i++) { matrix.Add(new List()); for (int j = 0; j < c; j++) { matrix[i].Add(j + number); } number += c; } } }