만드는 중입니다

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

과녁 맞히기

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

요약
각 줄의 맨 위나 맨 아래 과녁을 하나씩 맞혀 모든 과녁을 없애는 순서의 수를 10^9+7로 나눈 나머지로 구합니다.
난이도

보통10점 중 5점

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

문제

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

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

입력

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

두 번째 줄에 각 줄에 매달린 과녁의 개수 A_1,A_2,⋯ ,A_MA\_1,A\_2,\cdots ,A\_M(1≤A_i≤N1\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