def _echelonize(a: list[int]):
for i in range(len(a)):
for j in range(i):
a[i] = min(a[i], a[i] ^ a[j])
for j in range(i):
a[j] = min(a[j], a[i] ^ a[j])
def solve_all(a: list[int], inbits: int):
a = a[:]
_echelonize(a)
free = (1 << inbits+1) - 1
for v in a:
if v == 0:
continue
free ^= 1 << v.bit_length()-1
if not (free & 1):
return
x = free
while True:
y = x
for v in a:
if (v & y).bit_count() & 1:
y ^= 1 << v.bit_length()-1
yield y >> 1
if x == 1:
break
x = (x - 2) & free
def solve(n, k, a):
use = [0] * 60
for j in range(60):
for i in range(n):
use[j] ^= (a[i] >> j & 1) << (i + 1)
use[j] ^= k >> j & 1
for b in solve_all(use, n):
b = [b>>i&1 for i in range(n)]
ans = []
def merge_right(i, to, ans):
if b[i] == 0:
ans += [i+1, i+1, i+2, i+1]
else:
ans += [i+1]
for j in range(i+2, to+1):
ans += [j, j, j-1, j]
def merge_left(i, ans):
if b[i] == 0:
ans += [i, i, i-1, i]
else:
ans += [i]
for j in range(i-2, -1, -1):
ans += [j+1, j+1, j+2, j+1]
found = False
if all(b[i] == 0 for i in range(n)):
ans += [1, 1]
found = True
else:
for i in range(1, n):
if b[i-1] == b[i]:
found = True
if b[i] == 0 and i > 1 and b[i-2] == 1:
ans += [i, i, i-1, i]
for j in reversed(range(0, i-2)):
merge_right(j, i, ans)
for j in range(i+1, n):
merge_left(j, ans)
break
elif b[i] == 0 and i+1<n and b[i+1] == 1:
ans += [i, i, i+1, i]
for j in reversed(range(0, i-1)):
merge_right(j, i+1, ans)
for j in range(i+2, n):
merge_left(j, ans)
break
elif b[i]==1:
ans += [i]
for j in reversed(range(0, i-1)):
merge_right(j, i, ans)
for j in range(i+1, n):
merge_left(j, ans)
break
found = False
if found:
return ans
return None
def check(n, k, a, op):
a = a[:]
for i in op:
x = a[i-1] ^ a[i]
a[i-1] = a[i] = x
return a[0] == k
t = int(input())
for _ in range(t):
n, k = map(int, input().split())
a = list(map(int, input().split()))
res = solve(n, k, a)
if res:
print("Yes")
print(len(res))
print(*res)
assert check(n, k, a, res)
else:
print("No")