C. MEXOR
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Дано положительное целое число $$$n$$$ и неотрицательное целое число $$$k$$$. Постройте перестановку $$$p$$$ длины $$$n$$$ такую, что выполняется следующее условие:

  • Пусть $$$f(i)=\operatorname{mex}([p_0,p_1,\ldots,p_i])$$$$$$^{\text{∗}}$$$ для каждого $$$0 \le i \lt n$$$. Тогда $$$f(0) \oplus f(1) \oplus \ldots \oplus f(n-1)$$$ должно быть равно $$$k$$$, где $$$\oplus$$$ обозначает операцию побитового исключающего ИЛИ.

Заметьте, что перестановка длины $$$n$$$ — это массив, состоящий из $$$n$$$ различных целых чисел от $$$0$$$ до $$$n-1$$$ в произвольном порядке. Например, $$$[1,2,0,4,3]$$$ — это перестановка, а $$$[0,1,1]$$$ — не перестановка ($$$1$$$ встречается в массиве дважды), и $$$[0,2,3]$$$ тоже не перестановка ($$$n=3$$$, но в массиве есть число $$$3$$$).

$$$^{\text{∗}}$$$Наименьшее исключенное (MEX) набора чисел $$$c_1, c_2, \ldots, c_k$$$ определяется как наименьшее неотрицательное целое число $$$x$$$, которое не встречается в наборе чисел $$$c$$$.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \le t \le 10^4$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке каждого набора входных данных содержатся два целых числа $$$n$$$ и $$$k$$$ ($$$1 \le n \le 2 \cdot 10^5$$$, $$$0 \le k \le 10^9$$$).

Гарантируется, что сумма значений $$$n$$$ по всем наборам входных данных не превосходит $$$2 \cdot 10^5$$$.

Выходные данные

Для каждого набора входных данных, если такой перестановки не существует, выведите «NO».

Иначе сначала выведите «YES» на отдельной строке. Затем выведите $$$n$$$ различных целых чисел $$$p_0,p_1,\ldots,p_{n-1}$$$ ($$$0 \le p_i \lt n$$$), представляющих построенную вами перестановку $$$p$$$. Если существует несколько перестановок, удовлетворяющих условию, вы можете вывести любую из них.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Пример
Входные данные
6
1 0
1 1
3 0
4 8
5 1
9 12
Выходные данные
NO
YES
0
YES
0 1 2
NO
YES
3 0 2 1 4
YES
1 4 0 8 2 3 7 5 6
Примечание

В первом и втором наборах входных данных единственная перестановка длины $$$1$$$ — это $$$[0]$$$, при этом $$$f(0)=\operatorname{mex}([0])=1$$$.

В четвёртом наборе входных данных можно доказать, что не существует перестановки длины $$$4$$$ такой, что $$$f(0) \oplus f(1) \oplus f(2) \oplus f(3)=8$$$.

В пятом наборе входных данных значения $$$f(i)$$$ для $$$0 \le i \lt n$$$ таковы:

  • $$$f(0)=\operatorname{mex}([3])=0$$$,
  • $$$f(1)=\operatorname{mex}([3,0])=1$$$,
  • $$$f(2)=\operatorname{mex}([3,0,2])=1$$$,
  • $$$f(3)=\operatorname{mex}([3,0,2,1])=4$$$,
  • $$$f(4)=\operatorname{mex}([3,0,2,1,4])=5$$$,

Поскольку $$$f(0) \oplus f(1) \oplus f(2) \oplus f(3) \oplus f(4)=0\oplus 1 \oplus 1 \oplus 4 \oplus 5=1$$$, перестановка $$$p=[3,0,2,1,4]$$$ является корректной.