题目描述
有 N 张卡片,编号为 1,…,N。第 i 张卡片 (1≤i≤N) 的正面写有整数 Ai,背面写有整数 Bi。
考虑选择一张或多张卡片,使得所选卡片正面的整数的异或和不超过 K。找到所选卡片背面整数的最大可能异或和。
什么是异或和?两个整数 a 和 b 的异或和 a⊕b 定义如下。
- 二进制表示中,对于异或和 a⊕b 的 2k 位(k≥0),如果 a 和 b 的 2k 位中恰好有一个位是 1,则 a⊕b 的该位为 1;否则,该位为 0。
例如,3⊕5=6(二进制表示:011⊕101=110)。
通常情况下,k 个整数 p1,…,pk 的异或和被定义为 (⋯((p1⊕p2)⊕p3)⊕⋯⊕pk)。我们可以证明它与 p1,…,pk 的顺序无关。
约束条件
- 1≤N≤1000
- 0≤K<230
- 0≤Ai,Bi<230(1≤i≤N)
- 输入的所有值都是整数。
输入
输入数据从标准输入获得,格式如下:
N K
A1 B1
⋮
AN BN
输出
打印选择一张或多张卡片,使得所选卡片正面的整数异或和不超过 K 的条件下,背面整数的最大可能异或和。如果无法按照条件选择卡片,则输出 −1。
示例输入 1
示例输出 1
选择卡片 1 和 2,它们正面整数的异或和为 2,背面整数的异或和为 3,这是最大值。
示例输入 2
示例输出 2
无法满足条件选择卡片的情况。
示例输入 3
示例输出 3