Олимпиадный тренинг

Задача . D. Раздел острова


Задача

Темы: Конструктив *1900

На острове Бука произошла революция. На место старого правительства пришло новое. Новое правительство включает в себя n партий, каждой из них положена некоторая доля острова в соответствии с их вкладом в становление революции. Вот только разделить остров у них не получается.

Остров условно можно представить как два прямоугольника размерами a × b и c × d единичных клеток соответственно, которые располагаются вплотную друг к другу. При этом одна из сторон длины a и одна из сторон длины c лежат на одной прямой. Более подробно это можно видеть на рисунке.

i-ой партии полагается доля острова в xi единичных клеток. Каждая такая доля должна целиком покрывать некоторые клетки острова (частично покрывать клетки не допускается) и быть связной фигурой. Связность подразумевает, что из любой клетки партии можно добраться до любой другой клетки этой же партии, передвигаясь через смежные по ребрам клетки, которые также принадлежат данной партии.

От Вас требуется разделить остров между партиями.

Входные данные

В первой строке содержится 5 целых чисел, разделенных пробелом — a, b, c, d и n (1 ≤ a, b, c, d ≤ 50, b ≠ d, 1 ≤ n ≤ 26). Во второй строке находится n чисел, разделенных пробелом. i-е из них равно числу xi (1 ≤ xi ≤ a × b + c × d). Гарантируется, что .

Выходные данные

Если разделить остров между партиями требуемым образом невозможно — выведите «NO» (без кавычек). Иначе выведите «YES» (тоже без кавычек), а, начиная со следующей строки, выведите max(b, d) строк, по a + c символов в каждой. Для обозначения, какой партии какую клетку острова отнести, используйте маленькие латинские буквы. Для первой по порядку партии из входных данных используйте «a», для второй — «b» и так далее. Для клеток, принадлежащих морю, используйте «.». Первый символ второй строки выходных данных должен соответствовать клетке, принадлежащей прямоугольнику a × b, последний символ второй строки — клетке, принадлежащей прямоугольнику c × d.

Если решений несколько, выведите любое.


Примеры
Входные данныеВыходные данные
1 3 4 2 2 3
5 8 3
YES
aaabb
aabbb
cbb..
ccb..
2 3 2 1 4 4
1 2 3 4
YES
abbd
cccd
...d
...d

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя