Logo HelloWorld信息学奥赛题库

少儿编程

时间限制:1 s 空间限制:256 MB

#4603. 翘课

Statistics

题目描述

神仙 bn 又想翘数学课了!

一天,bn 想通过藏在机房里面来避免要上数学课的悲惨命运,于是他来到了学校那雄伟的信息楼。

进入楼内,bn 面前出现了 $n$ 个机房,不同的机房之间有一些道路把它们相连。不仅如此,bn 还发现了一个奇怪的规律:有一些机房两两之间总存在一条道路,却和其它机房没有任何道路相连。

bn 决定运用离散数学的知识来分析自己的逃跑路径。

简单来说,这 $n$ 个机房可以看作一个有 $n$ 个节点的简单无向图,图中存在 $k$ 个联通块,第 $i$ 个联通块的大小是 $s_i$;每一个独立的联通块都是一个完全图,即联通块内所有节点两两相连。为了逃跑方便,bn 想在图中新加入 $k-1$ 条边,使得整张图联通。

bn 不想在“连边”(即修建新的道路)上花费太多的时间,因此他定义了某种连边方案 $T$ 的价值函数 $val(T)$ 如下:

  • 设该方案内,$k$ 个联通块向外连出的边数分别为 $d_1,d_2,…,dk$,则 $val(T)=\prod\limits{i=1}^kd_i!$,其中 $\prod$ 表示连乘。

现在 bn 想知道,若给定机房对应的图,那么所有可行连边方案的价值之和是多少呢?

这下子 bn 不会了,他想问问你。

由于这个数很大,你只需要输出它对 $998244353$ 取模之后的结果即可。

输入格式

为了减少输入量,我们规定第$i$个联通块内的节点编号依次为 $\sum\limits_{j=1}^{i-1}sj+1,\sum\limits{j=1}^{i-1}sj+2,…,\sum\limits{j=1}^{i-1}s_j+s_i$ ,因此不再输入每个联通块内的节点编号。

第一行两个整数 $n,k$,表示机房的数量和联通块数;

第二行k个整数 $s_1,s_2,...,s_k$ ,表示每个联通块的大小。

输出格式

一行一个正整数,表示所有可行连边方案的价值之和,答案对 $998244353$ 取模。

样例 1

input

3 2
2 1

output

2

连边方案共有两种,即连 $(1,3)$ 或连 $(2,3)$。两种方案的价值均为 $1×1=1$,因此输出 $2$。

样例 2

input

5 3
3 1 1

output

30

可以证明可行的连边方案共有 $15$ 种,价值均为 $1×1×2!=2$,因此输出 $30$。

样例 3

input

4 4
1 1 1 1

output

72

可以证明可行的连边方案共有 $16$ 种,其中价值为 $1×2!×2!×1=4$ 的有 $12$ 种,价值为 $1×1×1×3!=6$ 的有 $4$ 种,因此输出 $4×12+6×4=72$。

数据范围与提示

数据规模

对于 $10\%$ 的数据,保证 $n≤10$;

另有 $10\%$ 的数据,保证 $k≤2$;

对于 $40\%$ 的数据,保证 $k≤100$;

对于 $60\%$ 的数据,保证 $k≤1000$;

另有 $20\%$ 的数据,保证所有的 $s_i$ 均为 $1$;

对于 $100\%$ 的数据,保证 $n≤10^9,k≤7000,1<k≤n,1≤s_i≤10^9$ 且 $∑s_i=n$,图中无重边和自环。