小苯的最大异或
题号:NC315802
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯给定你两个非负整数 x,y
\hspace{15pt}你可以进行任意次操作。每次操作中,你必须选择下面两种之一:
\hspace{23pt}\bulletx 变为 \left\lfloor \dfrac{x}{2} \right\rfloor
\hspace{23pt}\bullety 变为 \left\lfloor \dfrac{y}{2} \right\rfloor
\hspace{15pt}操作次数可以为 0
\hspace{15pt}你的任务就是最大化最终的 x \oplus y 的值,其中 \oplus 表示按位异或运算。

输入描述:

\hspace{15pt}第一行输入一个整数 T\ (1 \leqq T \leqq 2 \times 10^4),表示测试数据组数。
\hspace{15pt}接下来 T 行,每行输入两个非负整数 x,y\ (0 \leqq x,y \leqq 10^9)

输出描述:

\hspace{15pt}对于每组测试数据,输出一行一个整数,表示最大可能的 x \oplus y
示例1

输入

复制
5
10 12
7 8
0 13
32 32
100 57

输出

复制
14
15
13
48
120

说明

\hspace{15pt}对于第一组数据,不进行对 y 的操作,把 x 连续操作两次,可以得到 x=2,y=12,此时异或值为 2 \oplus 12 = 14
\hspace{15pt}对于第二组数据,直接不进行任何操作即可,此时 7 \oplus 8 = 15
\hspace{15pt}对于第三组数据,保持 y=13 不变,把 x 保持为 0,答案就是 13
\hspace{15pt}对于第四组数据,可以把其中一个 32 操作一次变成 16,另一个保持不变,此时异或值为 32 \oplus 16 = 48