만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

짝수 빗물

시간 제한3초메모리 제한512 MB

요약
n개의 기둥 중 k개를 0으로 만들 때 고인 빗물의 넓이가 짝수가 되는 경우의 수를 10^9+7로 나눈 나머지로 구합니다. n은 25,000 이하이고 k는 25 이하입니다.
난이도

어려움10점 중 9점

유형
동적 계획법, 누적 합, 수학
정답자
아직 제출이 없습니다

문제

너비가 11인 기둥 nn개가 옆면끼리 맞닿은 채 왼쪽에서 오른쪽으로 놓여 있다. 왼쪽에서 ii번째 기둥의 높이는 hih_i이다.

비가 내리면 일부 자리에 물이 고일 수 있다. 짧은 기둥이 두 높은 기둥 사이에 있을 때 그렇다.

정확히는, 기둥의 내부나 경계에 속하지 않는 점 가운데, 같은 높이에서 왼쪽의 어떤 기둥과 오른쪽의 어떤 기둥에 동시에 걸쳐 있는 점에는 물이 남는다.

고인 물의 넓이가 관심사다. 모든 hih_i가 정수이면 이 넓이도 정수이다. 노인들의 미신에 따르면 고인 물의 넓이가 22로 나누어떨어질 때 행복이 찾아온다.

오늘 비가 올 예정이다. 그 전에 kk개의 기둥을 제거할 계획이다. 제거한다는 것은 해당 기둥의 높이를 00으로 바꾸는 것이다. (nk)\binom{n}{k}가지 제거 방법 중 고인 물의 넓이가 짝수가 되는 경우는 몇 가지인가? 답은 109+710^9+7로 나눈 나머지로 출력한다.

입력

첫 줄에 두 정수 nn과 kk가 주어진다 (1≤n≤25 0001 \leq n \leq 25\,000, 0≤k≤min⁡(25,n−1)0 \leq k \leq \min(25, n - 1)). 둘째 줄에는 nn개의 정수 h1,…,hnh_1, \ldots, h_n이 주어진다 (1≤hi≤1091 \leq h_i \leq 10^9).

출력

고인 물의 넓이가 짝수가 되도록 kk개의 기둥을 제거하는 방법의 수를 109+710^9+7로 나눈 나머지로 한 줄에 출력한다.

힌트

첫 번째 샘플 설명이다. 왼쪽의 큰 그림은 초기 상태이다. 작은 그림들은 기둥 하나를 제거하는 7가지 경우를 각각 보여 준다(화살표가 제거할 기둥을 가리킨다). 회색 영역이 고인 물이다. 4가지 경우에서 고인 물의 넓이(각 그림 옆 숫자)가 짝수이다.

예제2

  1. 예제 1

    입력
    7 1
    2 5 2 4 1 6 2
    
    예상 출력
    4
    
  2. 예제 2

    입력
    5 0
    1 3 1 3 1
    
    예상 출력
    1