#P16107. [ICPC 2019 NAIPC] XOR Sequences

[ICPC 2019 NAIPC] XOR Sequences

题目描述

假设给定两个整数 mmnn。同时还给定一个包含 nn 个互不相同整数的列表 x1,x2,,xnx_1, x_2, \dots, x_n,满足 0xi2m10 \leq x_i \leq 2^m - 1。对于每个 002m12^m - 1 之间的数 yy,你找到了数 pyp_y,使得 xpyx_{p_y}yy 的按位异或值最大。也就是说,对于所有 i=1..ni = 1..nipyi \ne p_y,均有 yxpy>yxiy \oplus x_{p_y} > y \oplus x_i\oplus 表示按位异或)。

现在考虑逆向问题。给定 mmnn 以及序列 p0,p1,,p2m1p_0, p_1, \dots, p_{2^m - 1},请统计有多少个互不相同的整数序列 x1,x2,,xnx_1, x_2, \dots, x_n 能够通过上述算法生成给定的 pp 序列。如果两个 xx 序列存在某个下标 ii 使得 xix_i 不同,则认为它们是不同的。输出该计数对 109+710^9 + 7 取模的结果。

输入格式

每个测试用例的第一行包含两个空格分隔的整数 mm0m160 \leq m \leq 16)和 nn1n2m1 \leq n \leq 2^m),其中 2m2^mpp 序列的长度,nnxx 序列的长度。

接下来的 2m2^m 行,每行包含一个整数 pp1pn1 \leq p \leq n)。这些是按顺序给出的序列 p0,p1,,p2m1p_0, p_1, \dots, p_{2^m - 1} 的值。11nn 之间的每个整数至少出现一次。

输出格式

输出一个整数,表示能够通过上述算法生成给定 pp 序列的序列 x1,x2,,xnx_1, x_2, \dots, x_n 的数量,对 109+710^9 + 7 取模。

3 6
1
1
2
2
3
4
5
6
4
2 3
1
2
1
3
0
3 8
1
2
3
4
5
6
7
8
1

提示

翻译由 DeepSeek V3.2 完成