Problem2006--跳格子

2006: 跳格子

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 249  Solved: 64
[Status] [Submit] [Creator:]

Description

众所周知童年兔是一只非常可爱的兔子,它最喜欢的游戏就是“跳格子”。跳格子游戏规则是这样的:  

有 n 个正方形格子从左到右排成一排,格子从左到右编号为 1,2,……,n。一开始童年兔在最左边的第 1 个格子,它每次可以往右跳 1 至 3 个格子,它要到达最右边的第 n 个格子。

也就是说,如果当前童年兔在第 i 个格子,它可以往右跳 1 格跳到第 i+1 个格子;也可以往右跳 2 格跳到第 i+2 个格子;也可以往右跳 3 格跳到第 i+3 个格子。(但是不能跳过头,比如当 n = 10, i = 8 时,就不能从第 i 个格子向右跳 3 格,因为 8 + 3 = 11,而 n < 11)

但是因为下雨,导致有 m 个格子积了水,童年兔不能跳到这些积了水的格子上,因为这会打湿它新买的鞋子。

问:在不能跳到所有积水的格子的情况下,童年兔从第 1 个格子跳到第 n 个格子,一共有多少种不同的方案?(由于总的方案数可能很大,所以你只需要求出总的方案数除以 10007 的余数即可。)

Input

输入的第一行包含两个整数 n 和 m,以一个空格分隔,分别表示总的格子数以及积水的格子数(2≤n≤1000, 0≤m≤n-2)。

输入的第二行包含 m 个整数,两两之间以一个空格分隔,表示积水的 m 个格子的编号。

数据保证第 1 个格子(起点)和第 n 个格子(终点)必定没有积水。

Output

输出一个整数,表示在不能跳到所有积水的格子的情况下,童年兔从第 1 个格子跳到第 n 个格子的不同方案数除以 10007 的余数。

Sample Input Copy

【样例输入1】
5 1
3
【样例输出1】
3
【样例输入2】
100 3
2 3 4
【样例输出2】
0

HINT

【样例解释】
样例1:一共有3种方案:
    ① 1 → 2 → 4 → 5
    ② 1 → 2 → 5
    ③ 1 → 4 → 5
样例2:因为第2、3、4个格子都积水了,所以从第1个格子无法跳到任何一个格子,所以方案数为 0 。

Source/Category