#P3014. 异或训练

异或训练

Description

安安最近在学习异或运算,现在他学习异或运算遇到了瓶颈,所以他去找妹一块儿探讨异或问题。

妹对异或运算理解的非常透彻,为了加深安安对异或运算的理解,决定提出Q个问题让安安解决。

问题是这样的:安妹给出两个正整数x,n,问安安能不能在 0∼n内找到两个数,使他们的异或值为 x。

妹虽然提出了 Q个问题,但是她并没有答案,请你帮花椰妹计算出每个问题的答案。

异或是在两个整数的二进制对应位上进行运算,运算规则如下:

  • 0 xor 0=0
  • 0 xor 1=1
  • 1 xor 0=1
  • 1 xor 1=0

C++语言中,异或是由^符号表示,例如:ans = 3 ^ 8;ans = 11

数据范围

  • 对于100%的数据,有1≤Q≤10⁵,1≤x,n≤10⁹。

Input Format

第一行一个整数Q,表示 共提出了Q个问题。

下面Q行,第 i行有两个正整数x,n表示 第i个问题。

Output Format

输出Q行,第i行有一个字符,Y表示第i个问题可以找到两个合法的数,N表示第i个问题不能找到两个合法的数。

3
2 4
5 4
6 3
Y
Y
N

Hint

样例解释

  • 对于第一个问题,0⊕2=2;
  • 对于第二个问题,1⊕4=5;
  • 对于第三个问题,不能在区间[0,3]中找出两个数,使它们的两个数异或结果为6。

Source

信奥星OJ http://127.0.0.1