B. MEXor Mixup

time limit per test

2 seconds

memory limit per test

256 megabytes

Alice gave Bob two integers a and b (a>0 and b≥0). Being a curious boy, Bob wrote down an array of non-negative integers with MEX value of all elements equal to a and XOR value of all elements equal to b.

What is the shortest possible length of the array Bob wrote?

Recall that the MEX (Minimum EXcluded) of an array is the minimum non-negative integer that does not belong to the array and the XOR of an array is the bitwise XOR of all the elements of the array.

Input

The input consists of multiple test cases. The first line contains an integer t (1≤t≤5⋅104) --- the number of test cases. The description of the test cases follows.

The only line of each test case contains two integers a and b (1≤a≤3⋅105; 0≤b≤3⋅105) --- the MEX and XOR of the array, respectively.

Output

For each test case, output one (positive) integer --- the length of the shortest array with MEX a and XOR b. We can show that such an array always exists.

Example

Input

Copy

复制代码
5
1 1
2 1
2 0
1 10000
2 10000

Output

Copy

复制代码
3
2
3
2
3

Note

In the first test case, one of the shortest arrays with MEX 1 and XOR 1 is [0,2020,2021].

In the second test case, one of the shortest arrays with MEX 2 and XOR 1 is [0,1].

It can be shown that these arrays are the shortest arrays possible.

解题说明:此题是一道数学题,采用异或运算,可以先预处理一下,求出所有30000以下数字的异或值,MEX为a,即小于a的数都得出现,所以可以先将他们XOR起来。然后如果这些数的异或已经等于b了,那最小长度就是a,如果不等于,那么只要在找一个数,就可以异或得到b,长度为a+1,但如果这个数恰好等于a,就需要再找两个数,是这两个数异或等于a,长度为a+2。

cpp 复制代码
#include <stdio.h>
#include <string.h>
int a[300030];
int main()
{
	int t;
	scanf("%d", &t);
	int i;
	for (i = 1; i < 300030; i++)
	{
		a[i] = a[i - 1] ^ i;
	}
	while (t--)
	{
		int n, m;
		scanf("%d%d", &n, &m);
		if (m == a[n - 1])
		{
			printf("%d\n", n);
		}
		else if (m == a[n])
		{
			printf("%d\n", n + 2);
		}
		else
		{
			printf("%d\n", n + 1);
		}
	}
	return 0;
}
相关推荐
大闲在人9 分钟前
7. 供应链与制造过程术语:“周期时间”
算法·供应链管理·智能制造·工业工程
小熳芋12 分钟前
443. 压缩字符串-python-双指针
算法
Charlie_lll22 分钟前
力扣解题-移动零
后端·算法·leetcode
chaser&upper22 分钟前
矩阵革命:在 AtomGit 解码 CANN ops-nn 如何构建 AIGC 的“线性基石”
程序人生·算法
weixin_4997715531 分钟前
C++中的组合模式
开发语言·c++·算法
iAkuya1 小时前
(leetcode)力扣100 62N皇后问题 (普通回溯(使用set存储),位运算回溯)
算法·leetcode·职场和发展
近津薪荼1 小时前
dfs专题5——(二叉搜索树中第 K 小的元素)
c++·学习·算法·深度优先
xiaoye-duck1 小时前
吃透 C++ STL list:从基础使用到特性对比,解锁链表容器高效用法
c++·算法·stl
松☆1 小时前
CANN与大模型推理:在边缘端高效运行7B参数语言模型的实践指南
人工智能·算法·语言模型
java干货1 小时前
为什么 “File 10“ 排在 “File 2“ 前面?解决文件名排序的终极算法:自然排序
开发语言·python·算法