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

Задача . Календарь


Неудовлетворенный стандартным календарем своей операционной системы, Витя решил написать программу, которая будет выводить красиво отформатированный календарь. Он разработал формальные требования к календарю, но понял, что сам не способен написать соответствующую программу. Помогите ему.

Календарь состоит из блоков, каждый из которых соответствует одному месяцу. Блоки расположены в виде таблицы из \(k\) столбцов и \(12/k\) строк (\(k\) выбирается делителем числа 12). Месяцы выводятся в следующем порядке: первая строка содержит блоки, соответствующие месяцам с первого по \(k\)-ый, следующая — с \((k + 1)\)-го по \(2k\)-ый, и т. д.

Ширина всех блоков в столбце должна быть одинакова, высота всех блоков равна семи (числу дней в неделе). Между блоками различных строк таблицы выводится пустая строка, в каждой строке между соседними блоками из разных столбцов выводится три пробела.

Блок, соответствующий месяцу, устроен следующим образом. Каждой (в том числе неполной) неделе данного месяца в блоке соответствует столбец, имеющий ширину равную двум. Между двумя соседними столбцами в каждой строке выводится один пробел. Если несколько блоков располагаются в одном столбце в календаре, то для выравнивания ширины в те блоки, которые содержат меньше недель, в конец добавляется необходимое число пустых столбцов-недель. При этом разные столбцы календаря могут иметь разную ширину.

Все числа месяца заносятся в блок, соответствующий этому месяцу. Число заносится в ту строку блока, которая соответствует дню недели, на который приходится число в этом месяце. Число заносится в столбец блока, соответствующий неделе, в которой находится данное число. Однозначные числа дополняются слева одним пробелом. Таким образом, числа в столбце оказываются выравнены по правому краю.

image

Формат входных данных
Входной файл содержит описание года, календарь для которого следует вывести — три числа: \(d\) — день недели, на который приходится первое января (\(1 \le d \le 7\)), \(l\) — является ли год високосным (\(l = 1\) означает, что год является високосными, \(l = 0\) — что не является) и \(k\) — количество столбцов в календаре (\(k\) — одно из чисел \(1, 2, 3, 4, 6, 12\)).

Напомним, что високосный год отличается от обычного тем, что в високосном году февраль содержит 29 дней.

Формат выходных данных
Выведите календарь, отформатированный как описано в условии задачи. Проверяющая программа в этой задаче игнорирует пробелы в конце строк. В остальном календарь должен быть отформатирован в точности в соответствии с условием.

Для наглядности в примере вместо пробелов выведены точки. Ваша программа должна выводить пробелы.


Примеры
Входные данныеВыходные данные
1 4 1 4
    5 12 19 26          2  9 16 23    1  8 15 22 29       5 12 19 26   
    6 13 20 27          3 10 17 24    2  9 16 23 30       6 13 20 27   
    7 14 21 28          4 11 18 25    3 10 17 24 31       7 14 21 28   
 1  8 15 22 29          5 12 19 26    4 11 18 25       1  8 15 22 29   
 2  9 16 23 30          6 13 20 27    5 12 19 26       2  9 16 23 30   
 3 10 17 24 31          7 14 21 28    6 13 20 27       3 10 17 24      
 4 11 18 25          1  8 15 22 29    7 14 21 28       4 11 18 25      
                                                                       
    3 10 17 24 31       7 14 21 28       5 12 19 26       2  9 16 23 30
    4 11 18 25       1  8 15 22 29       6 13 20 27       3 10 17 24 31
    5 12 19 26       2  9 16 23 30       7 14 21 28       4 11 18 25   
    6 13 20 27       3 10 17 24       1  8 15 22 29       5 12 19 26   
    7 14 21 28       4 11 18 25       2  9 16 23 30       6 13 20 27   
 1  8 15 22 29       5 12 19 26       3 10 17 24 31       7 14 21 28   
 2  9 16 23 30       6 13 20 27       4 11 18 25       1  8 15 22 29   
                                                                       
    6 13 20 27          4 11 18 25    1  8 15 22 29       6 13 20 27   
    7 14 21 28          5 12 19 26    2  9 16 23 30       7 14 21 28   
 1  8 15 22 29          6 13 20 27    3 10 17 24       1  8 15 22 29   
 2  9 16 23 30          7 14 21 28    4 11 18 25       2  9 16 23 30   
 3 10 17 24          1  8 15 22 29    5 12 19 26       3 10 17 24 31   
 4 11 18 25          2  9 16 23 30    6 13 20 27       4 11 18 25      
 5 12 19 26          3 10 17 24 31    7 14 21 28       5 12 19 26      

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

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