#CF1854C. 销毁的期望时间

销毁的期望时间

销毁的期望时间

  • 时间限制:1 秒
  • 内存限制:256 MiB

题目描述

你有一个包含 nn 个不同整数的集合 SS,这些整数的取值范围在 11 到 mm 之间。

每一秒你会进行以下操作:

  1. 从 SS 中等概率随机选取一个元素 xx。
  2. 将 xx 从 SS 中移除。
  3. 如果 x+1≤mx+1 \leq m 且 x+1x+1 不在 SS 中,则将 x+1x+1 加入 SS。

请问,期望需要多少秒后 SS 变为空集?

请将答案对 1 000 000 0071\,000\,000\,007 取模输出。

形式化地,设 P=1 000 000 007P = 1\,000\,000\,007。可以证明答案可以表示为最简分数 ab\frac{a}{b},其中 aa 和 bb 是整数且 b≢0(modP)b \not\equiv 0 \pmod{P}。请输出满足 0≤z<P0 \le z < P 且 z⋅b≡a(modP)z \cdot b \equiv a \pmod{P} 的整数 zz。

输入格式

第一行包含两个整数 nn 和 mm(1≤n≤m≤5001 \leq n \leq m \leq 500)——集合 SS 的元素个数以及元素的最大值。

第二行包含 nn 个整数 S1, S2, …, SnS_1,\,S_2,\,\dots,\,S_n(1≤S1<S2<…<Sn≤m1 \leq S_1 < S_2 < \ldots < S_n \leq m)——集合 SS 的元素。

输出格式

输出一个整数,表示 SS 变为空集所需的期望秒数,对 1 000 000 0071\,000\,000\,007 取模。

样例输入 1

2 3
1 3

样例输出 1

750000009

样例输入 2

5 10
1 2 3 4 5

样例输出 2

300277731

样例输入 3

5 10
2 3 6 8 9

样例输出 3

695648216

样例输入 4

1 100
1

样例输出 4

100

提示

对于样例 1,以下是所有可能的情况及其概率:

  1. [1,3][1, 3](50%概率)→\to [1][1] →\to [2][2] →\to [3][3] →\to [][]
  2. [1,3][1, 3](50%概率)→\to [2,3][2, 3](50%概率)→\to [2][2] →\to [3][3] →\to [][]
  3. [1,3][1, 3](50%概率)→\to [2,3][2, 3](50%概率)→\to [3][3] →\to [][]

将它们加起来,得到 $\frac{1}{2}\cdot 4 + \frac{1}{4} \cdot 4 + \frac{1}{4} \cdot 3 = \frac{15}{4}$。我们看到 $750000009 \cdot 4 \equiv 15 \pmod{1\,000\,000\,007}$。

数据范围

对于所有数据,1≤n≤m≤5001\le n\le m\le500,1≤S1<⋯<Sn≤m1\le S_1<\cdots<S_n\le m。

子任务编号 分值 特殊限制
1 30 m≤15m\le15
2 m≤60m\le60
3 40 无特殊限制

每个测试点独立计分。