题目描述
给定一个多重集,其中每个数都属于区间 [0,2L)。
定义函数 f(S,k):它接受一个多重集 S 和一个满足 0≤k<2L 的整数 k,并返回新的多重集
S′={x⊕k∣x∈S}
其中 ⊕ 表示按位异或运算。
对于固定的 S,请你求出当 k 取遍所有满足 0≤k<2L 的整数时,f(S,k) 一共会产生多少个不同的多重集。
输入格式
第一行输入两个整数 n 和 L,分别表示多重集 S 中元素的个数,以及每个元素二进制表示所使用的位数。
第二行输入多重集 S 中的所有元素。
输出格式
输出一个整数,表示函数 f 的不同结果个数。
数据范围
- 1≤n≤105
- 0≤L≤20
- 对于任意 x∈S,都有 0≤x<2L
子任务
| 子任务 |
分值 |
n 限制 |
L 限制 |
其他限制 |
| 0 |
— |
样例测试 |
| 1 |
9 |
≤300 |
≤9 |
— |
| 2 |
11 |
≤3000 |
≤12 |
| 3 |
10 |
≤10000 |
≤20 |
| 4 |
18 |
≤100000 |
≤5 |
| 5 |
19 |
≤10 |
| 6 |
18 |
≤20 |
S 中每个数最多出现一次 |
| 7 |
15 |
— |
某一子任务的分数,只有在通过其全部测试点时才能获得。
样例
输入
6 3
0 1 3 4 6 7
输出
4
说明
f(S,0)={0,1,3,4,6,7}
f(S,1)={0,1,2,5,6,7}
f(S,2)={1,2,3,4,5,6}
f(S,3)={0,2,3,4,5,7}
因此,不同结果共有 4 个。