Мальчик вася хочет стать успешным программистом, но при этом много времени посвящает компьютерным играм. поэтому он не может вовремя делать и часто засыпает на уроках. однажды родители в наказание за плохие отметки в школе лишили васю компьютера и смартфона. тогда он решил скоротать время, собирая мозаику. мозаика представляет собой прямоугольное поле, разбитое на квадратики единичного размера. поле имеет ширину n и длину m. мозаика частично уже сложена, поэтому васе нужно разложить оставшиеся кусочки. ему сделать это. каждый кусочек представляет собой квадрат 3x3, в котором некоторые клетки пустые. его можно поворачивать, но нельзя переворачивать.
формат ввода
в первой строке заданы три целых числа n, m и k (3 ≤ n, m ≤ 8, 1 ≤ k ≤ 10). в последующих n строках идет описание поля. каждая строка имеет длину m и состоит из символов '#' и '.', которые обозначают занятую и пустую клетки соответственно.
далее идет k блоков по три строки описание кусочков. каждый кусочек описывается тремя трехсимвольными строками, содержащими символы '#' и '.', которые обозначают занятую и пустую клетки соответственно.
формат вывода
выведите сложенную мозаику так, чтобы в пустых клетках стояли цифры, соответствующие номеру кусочка, который будет располагаться в этой клетке. кусочки нумеруются с нуля в том порядке, в котором они заданы.
пример 1
ввод вывод
5 5 3
###..
##.##
#
##
##
###
###
###
.#.
.##
..#
###22
##1##
#0002
#000#
#000#
пример 2
ввод вывод
3 3 1
#.#
.##
..#
###
.#.
#0#
000
0##
MAX_SIZE = 10;
var
a: array[1..MAX_SIZE] of integer;
i, size: integer;
procedure delete_odd_elements();
var i, j: integer;
begin
i := 1;
repeat
if odd(a[i]) then
begin
dec(size);
for j := i to size do
a[j] := a[j + 1]
end
else inc(i);
until i > size;
end;
begin
writeln('Исходный массив: ');
size := MAX_SIZE;
for i := 1 to size do
begin
a[i] := random(100);
write(a[i] : 3);
end;
delete_odd_elements;
writeln;
writeln('Полученный массив: ');
for i := 1 to size do
write(a[i] : 3);
end.