과녁 맞히기

시간 제한1초메모리 제한1024 MB

요약
M개의 줄에 매달린 N개의 과녁을 매번 줄 하나의 맨 위나 맨 아래에서 하나씩 제거하는 순서의 경우의 수를 10^9+7로 나눈 나머지로 구한다.
난이도

보통10점 중 6점

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

문제

번호가 11부터 NN까지 적힌 NN개의 과녁이 있다. 이 과녁들은 MM개의 줄에 매달려 있다. ii번째 줄에는 A_iA\_i개의 과녁이 매달려 있으며, A_iA\_i들의 합은 NN이다.

승환이는 한 번에 한 개의 과녁을 정확히 맞혀서, 총 NN번 활을 쏴 모든 과녁을 맞히려 한다. 활을 쏠 때마다 승환이는 줄을 하나 선택하고, 그 줄에서 가장 위 또는 가장 아래에 있는 과녁을 맞힐 것이다. 승환이의 화살은 마법의 화살이기 때문에 화살에 맞은 과녁은 사라진다. 줄에 과녁이 하나만 남아 있다면, 그 과녁은 맨 위 과녁이자 맨 아래 과녁이고, 줄에 과녁이 없다면 해당 줄은 선택하지 않는다. 이때, 승환이가 과녁을 쏘는 순서의 경우의 수를 구해보자.

입력

첫 번째 줄에 과녁의 개수 N(1≤N≤5×106)N(1\leq N\leq 5\times 10^6)과 줄의 개수 M(1≤M≤N)M(1\leq M\leq N)이 주어진다.

두 번째 줄에 각 줄에 매달린 과녁의 개수 A_1,A_2,⋯ ,A_M(1≤A_i≤N;A\_1,A\_2,\cdots ,A\_M(1\leq A\_i\leq N; ∑_i=1MA_i=N)\sum\_{i=1}^{M}A\_i=N)이 공백으로 구분되어 주어진다.

출력

첫 번째 줄에 승환이가 과녁을 쏘는 순서의 경우의 수를 109+710^9+7로 나눈 나머지를 출력한다.

단, 109+710^9+7은 소수이다.

예제1

  1. 예제 1

    입력
    10 4
    1 2 3 4
    
    예상 출력
    806400