Busy Beaver 的大四期末周到了,他突然想起大一入学指导时收到的一份毕业前必须完成的活动清单。
给定一个包含 $N$ 个数字的数组 $a_1, \ldots, a_N$,其中 $a_i$ 表示完成第 $i$ 个活动的快乐值。
由于他在 MIT 的时间有限,他决定只完成这些活动中的一个连续子段。此外,为了获得最大收益,该子段必须包含至少两个活动。
在准备期末考试时,他想出了一种计算子段得分的复杂方法。从索引 $l$ 到 $r$ 的子段得分为其中任意两个不同活动的异或最小值的最小值。形式化地,从索引 $l$ 到 $r$ 的子段得分为 $\min\limits_{l \leq i < j \leq r} a_i \oplus a_j$。
Busy Beaver 最喜欢的数字是 $K$,他想计算得分为 $K$ 的子段数量。你能帮帮他吗?
输入格式
第一行包含两个整数 $N$ 和 $K$ ($2 \le N \le 10^5$, $0 \le K < 2^{30}$)。
第二行包含 $N$ 个空格分隔的整数 $a_1, \dots, a_N$ ($1 \le a_i < 2^{30}$)。
输出格式
输出一个整数:得分为 $K$ 且长度至少为二的连续子段的数量。
评分标准
- ($15$ 分) $N \leq 5000$。
- ($10$ 分) $K = 0$。
- ($25$ 分) 数组 $a$ 为非递减排序 ($a_{1} \leq \ldots \leq a_{N}$)。
- ($50$ 分) 无额外限制。
样例
输入 1
5 2 1 3 1 4 5
输出 1
3
说明
共有三个子段符合要求:
- $l = 1, r = 2$。
- $l = 2, r = 3$。
- $l = 2, r = 4$。