Задача №112750. Укладка плитки

В процессе ремонта в Лаборатории Информационных Технологий строителям необходимо заменить поврежденные напольные плитки в коридоре лаборатории, который имеет размер 2 × \(n\) метров. В распоряжении строителей есть неограниченный запас плиток двух размеров: 1 × 2 метра и 1 × 1 метр. При этом плитки размером 1 × 2 метра перед укладкой разрешается поворачивать на 90 градусов и размещать как вдоль, так и поперек коридора.

Строители уже начали ремонт и уложили в некоторых местах пола коридора \(k\) плиток размером 1 × 1. Для завершения ремонта прорабу необходимо подготовить план дальнейших работ. Для этого ему надо решить, каким образом уложить плитки на места, где они еще не уложены. Это можно сделать различными способами и прораб хочет перебрать все варианты и выбрать самый удачный. Перед тем как это сделать, прораб хочет знать, какое количество вариантов ему придется рассмотреть. Это число требуется найти по модулю \(10^9\) + 7.

Требуется написать программу, которая по заданной длине коридора \(n\) и расположению плиток, которые уже уложены, определяет количество способов укладки плиток на оставшиеся места. Ответ необходимо вывести по модулю \(10^9\) + 7.

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

Первая строка входного файла содержит два целых числа: \(n\) — длину коридора и \(k\) — количество уже уложенных единичных плиток (1 ≤ \(n\) ≤ 100 000, 0 ≤ \(k\) < 2\(n\)).

Последующие \(k\) строк содержат по два целых числа \(x_i\) и \(y_i\) , которые задают позиции уже уложенных единичных плиток, \(i\)-я плитка уложена на \(x_i\)-м метре коридора в \(y_i\)-м ряду (1 ≤ \(x_i\)\(n\), 1 ≤ \(y_i\) ≤ 2)

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

Выходной файл должен содержать одно целое число — количество способов укладки плиток в коридоре, взятое по модулю \(10^9\) + 7.

Пояснения к примерам

Внимание! Третий тест не подходит под ограничения для первых трех подзадач, но решение принимается на проверку только в том случае, если оно выводит правильный ответ на все тесты из примера. Решение должно выводить правильный ответ на третий тест даже, если оно рассчитано на решение только каких-либо подзадач из первых трех.

Все способы укладки плиток для первого примера:

Все способы укладки плиток для третьего примера (уже уложенная плитка отмечена серым цветом):

Система оценки и описание подзадач

Подзадача 1 (20 баллов)
1 ≤ \(n\) ≤ 8, \(k\) = 0
Баллы за подзадачу начисляются только в случае, если все тесты подзадачи пройдены.
Подзадача 2 (20 баллов)
1 ≤ \(n\) ≤ 1000, \(k\) = 0
Баллы за подзадачу начисляются только в случае, если все тесты подзадачи пройдены.
Подзадача 3 (20 баллов)
1 ≤ \(n\) ≤ 100 000, \(k\) = 0
Баллы за подзадачу начисляются только в случае, если все тесты подзадачи пройдены.
Подзадача 4 (40 баллов)
1 ≤ \(n\) ≤ 100 000, 1 ≤ \(k\) ≤ 2\(n\)
В этой подзадаче 20 тестов, каждый тест оценивается в 2 балла. Баллы за каждый тест начисляются независимо

Примеры
Входные данные
2 0
Выходные данные
7
Входные данные
3 0
Выходные данные
22
Входные данные
3 1
2 1
Выходные данные
8
Сдать: для сдачи задач необходимо войти в систему