Ограничения: время – 200ms/500ms, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Саша хочет собрать стену из деталей Лего. Все детали имеют одинаковую высоту и делятся на 2
вида: "квадратные" размера 1 на 1 и "прямоугольные" размера 1 на `L` (изображены на рисунке для `L=2`). Каждая деталь
надежно прикрепляется к соседям верхней и нижней гранью, но никак не скрепляется с боковыми соседями.
Чтобы стена была идеальной, должны выполняться следующие условия:
1. Все детали должны быть использованы. Нельзя оставлять детали не прикрепленными к стене.
2. Стена должна иметь вид прямоугольника толщины 1 без отверстий и выступов.
3. Стена не должна разваливаться на части. То есть, любой вертикальный разрез в пределах стены должен пересекаться с какой-нибудь деталью, которая не даёт стене распадаться по линии этого разреза. Примеры подходящей и неподходящей стен приведены на рисунке.
![width:400px|Пример стен](48315.png)
Для заданного количества "квадратных" и "прямоугольных" деталей найдите ширину и высоту стены, которую Саша сможет собрать.
Если Саша может собрать идеальную стену разных размеров, перечислите все варианты размеров.
В единственной строке ввода содержатся три целых числа: количество "квадратных" деталей `A` (`0 <= A <= 10^9`),
"прямоугольных" деталей `B` (`0 <= B <= 10^9`, A+B>0) и длина прямоугольной детали `L` (`2 <= L <= 10`).
В первой строке вывода должно содержаться одно число `N` -- количество вариантов сборки идеальной стены (возможно, 0). Затем
выведите `N` строк, содержащих по два целых числа (ширина и высота стены) в каждой. Строки должны идти в порядке возрастания ширины.
```sample Пример ввода 1
6 3 2
```
```sample Пример вывода 1
3
2 6
3 4
4 3
```
```sample Пример ввода 2
1 1 2
```
```sample Пример вывода 2
0
```
Стены для первого примера изображены на рисунке.
![width:400px|Пример 1](48316.png)
Во втором случае нельзя собрать стену, удовлетворяющую всем условиям.
*Система оценки и описание подзадач*
||.u|Подзадача 1 (20 баллов)||
`1 <= A+B <= 1000`, `L=2`, при этом `B=0` или `A=0` (присутствуют детали только одного вида)
В этой подзадаче 4 теста, каждый тест оценивается в 5 баллов. Баллы за каждый тест начисляются независимо.
||.u|Подзадача 2 (20 баллов)||
`1 <= A <= 1000`, `B=1`, `L=2` ("прямоугольная" деталь ровно одна)
В этой подзадаче 4 теста, каждый тест оценивается в 5 баллов. Баллы за каждый тест начисляются независимо.
Некоторые примеры ввода из условия задачи не соответствуют ограничениям подзадачи 1 и 2, для прохождения этих тестов вы
должны добавить необходимый код в свое решение, если вы ограничиваетесь только решением подзадач 1 или 2.
||.u|Подзадача 3 (25 баллов)||
`1 <= A <= 1000`, `2 <= B <= 1000`, `L=2`
Необходимые подзадачи: 1, 2.
В этой подзадаче 5 тестов. Баллы за подзадачу начисляются только в случае, если все тесты для этой подзадачи успешно пройдены.
||.u|Подзадача 4 (25 баллов)||
`1 <= A <= 10^9`, `2 <= B <= 10^9`, `L=2`
Необходимые подзадачи: 1, 2, 3.
В этой подзадаче 5 тестов. Баллы за подзадачу начисляются только в случае, если все тесты для этой подзадачи успешно пройдены.
||.u|Подзадача 5 (10 баллов)||
`1 <= A <= 10^9`, `2 <= B <= 10^9`, `2< L<=10`
Необходимые подзадачи: 1, 2, 3, 4.
В этой подзадаче 4 теста. Баллы за подзадачу начисляются только в случае, если все тесты для этой подзадачи успешно пройдены.
По запросу сообщается результат окончательной проверки на каждом тесте в подзадачах 1 и 2, и о первой ошибке в подзадачах 3, 4 и 5.