luogu#P7341. 『MdOI R4』Phoenix

『MdOI R4』Phoenix

题目背景

这是 66 题中唯一一道没有题目背景的题。

题目描述

给定 nn不可重集合 s1sns_1\dots s_n,集合中的数都是 [1,m][1,m] 的范围内的整数。

现在请你求出有多少种 1n1\sim n 的排列 pp,使得

$(\sum\limits_{i=1}^n |s_i|)-(\sum\limits_{i=1}^{n-1} |s_{p_i}\bigcap s_{p_{i+1}}|)=|\bigcup\limits_{i=1}^n s_i|$

成立。

答案对 998244353998244353 取模。保证取模前的真实答案大于 00

输入格式

本题有多组数据。

第一行一个正整数 TT 表示数据组数,对于每组数据:

第一行两个正整数 n,mn,m

第二行 nn 个正整数 a1,a2,,ana_1,a_2,\cdots,a_n,每个正整数代表一个状态压缩下的集合,若 aia_i 在二进制下从低位往高位的第 kk 位是 11,则 sis_i 包含 kk,否则 sis_i 不包含 kk

输出格式

TT 行,每行对应一组测试数据。

对于每组数据,一行一个整数表示答案。

1
3 3
1 3 7
4
2
5 9
2 30 98 386 482
4 2 
1 3 3 1
12
12

提示

【样例解释 #1】

三个集合分别为 {1},{1,2},{1,2,3}\{1\},\{1,2\},\{1,2,3\}

共有四个排列符合条件,分别是 (1,2,3),(1,3,2),(2,3,1),(3,2,1)(1,2,3),(1,3,2),(2,3,1),(3,2,1)

【数据规模与约定】

本题采用捆绑测试 |子任务编号|nn\le|mm\le|特殊性质|分值| |:-|:-|:-|:-|:-| |11|1010|2020|无特殊限制|1010| |22|3030|无特殊限制|ai=2ia_i=2^i|1010| |33|无特殊限制|无特殊限制|aioraj=max(ai,aj)a_i\operatorname{or}a_j=\max(a_i,a_j)|1010| |44|无特殊限制|无特殊限制|每个集合恰好包含两个元素|2020| |55|无特殊限制|2020|无特殊限制|2020| |66|无特殊限制|无特殊限制|无特殊限制|3030|

对于 100%100\% 的数据,1T501 \le T \le 501n1051\le \sum n\le 10^51m601\le m\le 600ai2m10 \le a_i \le 2^m-1,其中 n\sum n 表示所有测试数据中 nn 的和。

【提示与帮助】

本题读入量较大,请选手选择较快的读入方式。

感谢 JohnVictor\rm\textcolor{black}{J}\textcolor{red}{ohnVictor} 对此题的贡献。