Олимпиадный тренинг

Задача . B. Xor трех


У вас есть последовательность \(a\) длины \(n\), состоящая из цифр \(0\) и \(1\).

Вы можете выполнять следующую операцию над этой последовательностью:

  • выбрать индекс \(i\) от \(1\) до \(n-2\) (включительно);
  • одновременно заменить значения \(a_{i}\), \(a_{i+1}\), \(a_{i+2}\) на \(a_{i} \oplus a_{i+1} \oplus a_{i+2}\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.
Найдите последовательность из не более чем \(n\) операций, после которой все элементы \(a\) будут равны \(0\), или определите, что это невозможно.

Можно показать, что если существует последовательность операций некоторой длины такая, что после ее выполнения все элементы \(a\) будут равны \(0\), то существует и последовательность длины не более \(n\).

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

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

Первая строка набора входных данных содержит целое число \(n\) (\(3 \le n \le 2\cdot10^5\)) — длину \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i = 0\) или \(a_i = 1\)) — элементы \(a\).

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

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

Для каждого набора входных данных:

  • если нет способа сделать все элементы \(a\) равными \(0\), выполнив описанную операцию несколько раз, выведите «NO»;
  • в противном случае в первой строке выведите «YES», во второй строке выведите \(k\) (\(0 \le k \le n\)) — количество операций над \(a\) в вашем решении, а затем в третьей строке выведите последовательность \(b_1, b_2, \dots, b_k\) (\(1 \le b_i \le n - 2\)) — индексы, которые вы выбираете.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере последовательность содержит только числа \(0\), поэтому ничего не нужно делать.

Во втором примере мы можем преобразовать \([1, 1, 1, 1, 0]\) в \([1, 1, 0, 0, 0]\), а затем в \([0, 0, 0, 0, 0]\), сначала выполнив операцию, начиная с третьего элемента \(a\), а потом начиная с первого элемента \(a\).

В третьем примере независимо от того, сделаем ли мы первую операцию, начиная с первого или второго элемента \(a\), мы получим \([1, 1, 1, 1]\), что не может быть преобразовано в \([0, 0, 0, 0]\).


Примеры
Входные данныеВыходные данные
1 3
3
0 0 0
5
1 1 1 1 0
4
1 0 0 1
YES
0
YES
2
3 1
NO

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя