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;
}
相关推荐
NEFU_Jyj1 小时前
贝尔数(组合数学)
算法
希和20272 小时前
C语言程序设计题|有序数组插入数字冒泡排序
c语言·数据结构·算法
Pniubi2 小时前
力扣73 矩阵置零
算法·leetcode·矩阵
布莱克60512 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
D e re k ZH15 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
石小石Orz16 小时前
AI 正在蚕食我们的编码能力
前端·后端·算法
民乐团扒谱机17 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
青少儿编程课堂18 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
武子康20 小时前
Qwen-Drive 到底是什么:4B 级 VLM 如何成为驾驶策略底座
人工智能·算法·机器学习