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

Задача . E. Куро и Топологическая четность


Задача

Темы: дп *2400

Куро только что выиграл соревнование «Самый умный кот». Три друзья решили отпраздновать эту победу, поиграв в различные игры.

Куро попросил Кэти придумать игру, для которой нужны только бумага, карандаш, ножницы и много стрелок (считайте, что стрелок бесконечно много). Кэти тут же придумала игру и назвала ее Топологическая четность.

На бумаге рисуют \(n\) прямоугольников, пронумерованных от \(1\) до \(n\). Широ раскрашивает некоторые прямоугольники в некоторые цвета. А именно, \(i\)-й прямоугольник раскрашивается в цвет \(c_{i}\), где \(c_{i} = 0\) означает черный цвет, \(c_{i} = 1\) — белый, а \(c_{i} = -1\) означает, что этот прямоугольник не покрашен.

Правила игры просты. Игроки могут добавлять стрелки между различными прямоугольниками, причем каждая стрелка должна начинаться в прямоугольнике с меньшим номером, чем прямоугольник, в котором она заканчивается. Кроме того, игроки должны выбрать цвет (\(0\) или \(1\)) для каждого еще не покрашенного прямоугольника. Между двумя прямоугольниками должно быть не более одной стрелки. Результатом игры будет количество путей из прямоугольников чередующихся цветов. Например, пути, составляющие цвета \([1 \to 0 \to 1 \to 0]\), \([0 \to 1 \to 0 \to 1]\), \([1]\), \([0]\) будут посчитаны. Из прямоугольника \(x\) можно перейти в прямоугольник \(y\), если и только если есть стрелка из \(x\) в \(y\).

Куро понравилась игра, но он придумал, как сделать ее еще лучше. Он любит играть с четностью чисел. Его любимая четность равна \(p\), где \(p = 0\) обозначает «четное», а \(p = 1\) — «нечетное». Он хочет расставить стрелки и покрасить оставшиеся прямоугольники так, чтобы результат игры имел четность \(p\).

Так как может существовать много вариантов так расставить стрелки и выбрать цвета, посчитайте количество способов сделать это по модулю \(10^{9} + 7\).

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

Первая строка содержит два целых числа \(n\) и \(p\) (\(1 \leq n \leq 50\), \(0 \leq p \leq 1\)) — количество прямоугольников и любимая четность Куро.

Вторая строка содержит \(n\) целых чисел \(c_{1}, c_{2}, ..., c_{n}\) (\(-1 \leq c_{i} \leq 1\)) — цвета прямоугольников.

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

Выведите одно число — число способов расставить стрелки и выбрать оставшиеся цвета так, чтобы число путей с чередующимися цветами имело такую же четность, как и \(p\).

Примечание

В первом примере есть \(6\) способов покрасить кусочки и нарисовать стрелки, они показаны на рисунке ниже. Результаты игр в верхней строке равны \(3, 3, 5\), во второй — \(5, 3, 3\), слева направо.


Примеры
Входные данныеВыходные данные
1 3 1
-1 0 1
6
2 2 1
1 0
1
3 1 1
-1
2

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

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