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