11171: 色带
[Creator : ]
Description
加密技术大赛马上要开始了,小明在做赛场上用的一个横幅,这是一个技术感很强的横幅。
横幅有 $n$ 个大小一样的白色方格,方格上要储存 $k$ 个整数,依次为 $A_1,A_2,...,A_k$。储存一个 $A_i$ 的信息,就是要将连续的 $A_i$ 块方格涂黑,并且保证左右两边(如果不是边界)都是白色的方格。储存的信息必须按照顺序,不多不少,也就是第一个连续黑色方格是 $A_1$ 块,第二个连续黑色方格块是 $A_2$ 块,以此类推,最后一个连续黑色方格块是 $A_k$ 块。
例如,当 $N=8$ 时,如果要储存一个整数 $7$,那么有如下两种方式:
■■■■■■■□
□■■■■■■■
当 $N=8$ 时,如果要储存两个整数 $2,4$,那么有如下三种方式:
■■□■■■■□
■■□□■■■■
□■■□■■■■
特别的,如果 $k=1$ 并且 $A_1=0$,那么一个黑格都不涂是唯一的方式。当 $k>1$ 时,保证所有的 $Ai>0$。
现在小明想知道,一共有多少种方式可以做出满足要求的横幅。由于答案可能很大,只需要输出 $\bmod\ 10^9+7$ 的结果。如果无论如何不能做出满足要求的横幅,输出 NA
。
Input
第一行一个整数 $n$。
第二行 $k$ 个整数,依次为 $A_1,A_2,...,A_k$。
Output
一个整数,表示答案。由于答案可能很大,只需要输出 $\bmod\ 10^9+7$ 的结果。如果无论如何不能做出满足要求的横幅,输出
NA
。 Constraints
对于 4% 的数据,$k=1$。
对于 20% 的数据,$n≤500,\ k≤100$。
对于 40% 的数据,$n≤10000,\ k≤150$。
对于 100% 的数据,$1≤n≤10^6,\ A_i≥0$,如果 $k>1$ 那么 $Ai>0,\ A_1+A_2+...+A_k≤n$。
对于 20% 的数据,$n≤500,\ k≤100$。
对于 40% 的数据,$n≤10000,\ k≤150$。
对于 100% 的数据,$1≤n≤10^6,\ A_i≥0$,如果 $k>1$ 那么 $Ai>0,\ A_1+A_2+...+A_k≤n$。
Sample 1 Input
10
7 1
Sample 1 Output
3
■■■■■■■□■□
■■■■■■■□□■
□■■■■■■■□■
■■■■■■■□□■
□■■■■■■■□■
Sample 2 Input
12345
0
Sample 2 Output
1
Sample 3 Input
10
3 3 3
Sample 3 Output
NA
654321
100 90 80 70 60 40 30 20 10 1 2 3 4 5 6 7 8 9 50
269216225