#XMOJ11631. 奇怪的计算机

奇怪的计算机

说明

时间限制:1 Sec 内存限制:256 MB 输入文件computer.in 输出文件computer.out

小明造了一台奇怪的计算机,机器的规则如下:

1、这台计算机使用 $N$ 位二进制存储非负整数。

例:$N=5$ 时,十进制 $14$ 写作 $01110$,十进制 $22$ 写作 $10110$。

2、这台计算机可以生成数字序列,但是生成数字序列时,每次只能把一个二进制 $0$ 比特翻转为 $1$,绝对不会把已经变成 $1$ 的比特改回 $0$。

因此它能生成的序列固定满足:从数字 $0$ 开头,以 $2^N-1$ 结尾,整条序列恰好有 $N+1$ 个数字。

- 合法示例($N=4$):$0,\ 2,\ 3,\ 11,\ 15$

  二进制变化:$0000 → 0010 → 0011 → 1011 → 1111$,只新增 $1$、从不消除 $1$。

- 非法示例($N=4$):$0,\ 1,\ 3,\ 12,\ 15$

  $12$ 的二进制是 $1100$,对比前一项 $3(0011)$,低位原本的 $1$ 消失了,违反规则。


给定 $k$ 个数字 $a_1,a_2,\dots,a_k$,请统计满足以下全部条件的合法序列总数量:

1、序列是符合上面机器规则、长度为 $N+1$ 的完整数列;

2、数列里按先后顺序依次包含 $a_1,a_2,\dots,a_k$;

特殊说明:$k=0$ 时,所有合法序列都算作符合条件。

答案数值可能极大,需要对 $10^9+7$ 取模后输出;如果不存在满足条件的序列,直接输出 $0$。


输入格式

第一行两个整数 $N,\ k$

第二行输入 $k$ 个互不重复的非负整数 $a_1\ a_2\ \dots\ a_k$。

注意:当 $k=0$ 时,没有第二行输入。

输出格式

仅输出一行整数:合法序列的总数对 $10^9+7$ 取模的结果。

样例

样例 1

4 2
2 11

2

样例说明:

仅有两组合规数列

1、$0,2,3,11,15$;

2、$0,2,10,11,15$。

样例 2

10 3
5 1 3

0

样例说明:

不存在能按顺序容纳 551133 的合法数列(合法数列二进制 11 只会只增不减,11 含有的 11 比特比 55 少,不可能排在 55 后面)

样例 3

3 0

6

样例说明:

k=0k=0,统计全部原生合法序列,一共 66 种:

1、$0,1,3,7$

2、$0,1,5,7$

3、$0,2,3,7$

4、$0,2,6,7$

5、$0,4,5,7$

6、$0,4,6,7$

数据范围

对于 10% 的数据,$k=0$。

对于 20% 的数据,$k \le 3$,$N \le 8$。

对于 30% 的数据,$k \le 3$。

对于 100% 的数据,$1 \le N \le 60$,$0 \le k \le N+1$,每个 $a_i$ 满足 $0 \le a_i \le 2^N-1$,所有数字互不相同。