或与异或
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给出两个数 ,可以对其进行无限次操作,每次操作可以选择  和  其中一个数作为操作对象,然后将操作对象的值变成以下三种之一,另一个不变:

  。(按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为 。)

  。(按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位都为1时,结果位才为 。)

  。(按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为 。)

对于每组给出的  和  ,给出一个 ,判断是否可以通过操作使得  和  其中之一变成 

输入描述:

第一行包含一个整数  ,表示  组询问。

接下来  行,每行包含三个整数 

输出描述:

输出包含  行,对于每个询问,如果  和  能通过操作得到 , 输出YES,否则输出NO

示例1

输入

复制
3
1 2 3
3 2 4
3 5 3

输出

复制
YES
NO
YES

说明

,输出 YES

对于  ,不存在任意操作组合可以使得其中之一变成 ,输出 NO
无需操作,初始时 a=target,输出 YES