C1796 [模拟赛 #测试-D2]创业 (work)

内存限制:512 MB 时间限制:2000 ms

题目描述

小 X 最近想要创业。

他有一个 $n$ 个人的团队,为了能够创业成功,小 X 决定将这 $n$ 个人分成若干组,分工合作。

但是,每个人都不希望自己所在的分组中人数过多,因此每个人都有一个所在小组人数的上限

请你求出不同的分组方案的个数,答案对 $P$ 取模。

两种分组方案不同,当且仅当存在两个人,他们在第一种方案中处于同一组,在第二种方案中处于不同组。

输入格式

第一行两个正整数 $n,P$。

第二行 $n$ 个整数 $a_{1 \dots n}$,其中 $a_i$ 表示有 $a_i$ 个人的所在小组人数上限为 $i$。

输出

一行一个数,表示答案对 $P$ 取模后的值。

样例

样例输入 1

3 998244353 0 1 2

样例输出 1

4

样例输入 2

3 1000000007 0 0 3

样例输出 2

5

样例输入 3

见下发文件

样例输出 3

见下发文件

样例输入 4

3 998244353 1 1 1

样例输出 4

2

提示

【样例 $3$】

见下发文件。大样例

【数据范围与提示】

对于 $100\%$ 的数据,$1 \le n \le 2000$,$0 \le a_i \le n$,$\sum_{i=1}^{n} a_i = n$,$P = {10^9+7,998244353}$。

具体数据范围与其他约定如下:

image.png