Вы взламываете терминал данных Красного Драконьего Синдиката. Архив терминала, обозначаемый как $S$, изначально содержит $n$ зашифрованных сигнальных частот, каждая представлена бинарной строкой длины $k$. Эти исходные частоты проиндексированы от $1$ до $n$ в точном порядке их извлечения из памяти терминала. Чтобы взломать ядро, вы должны синтезировать новые частоты и внедрить их в архив. Каждая операция синтеза добавляет ровно одну новую бинарную строку в $S$, автоматически присваивая ей следующий доступный целочисленный индекс.
У вас есть две операции:
- Инверсия фазы: Выберите существующую частоту $s$ и добавьте её точное побитовое дополнение (Пусть $s$ — бинарная строка длины $k$, такая что $s = s_1 s_2 \dots s_k$, где каждый бит $s_i \in \{0, 1\}$. Побитовое дополнение $s$, часто обозначаемое математически как $\neg s$, определяется как новая бинарная строка длины $k$, в которой значение $i$-го бита равно $1 - s_i$.);
- Триангуляция сигнала: Выберите три существующие частоты $u$, $v$ и $w$ (не обязательно различные) и добавьте их побитовую мажоритарную функцию, обозначаемую $\operatorname{maj}(u,v,w)$. Для каждой позиции бита $i$ операция вычисляется как: $$\operatorname{maj}(u,v,w)_i = \operatorname{maj}(u_i,v_i,w_i).$$ Для отдельных битов $a$, $b$, $c$ значение $\operatorname{maj}(a,b,c)$ равно $1$, если хотя бы два из них равны $1$, и $0$ в противном случае.
Ваша цель — выяснить, можно ли создать конкретный целевой код награды $t$ длины $k$. Если это возможно, необходимо предоставить последовательность операций (не более $10^5$), которая успешно его создаёт.
Входные данные
Первая строка потока терминала содержит два целых числа $n$ и $k$ ($1 \le n, k \le 200$), представляющих количество исходных кодов и длину каждого кода.
Каждая из следующих $n$ строк содержит бинарную строку (из 0 и 1) длины $k$, показывающую код, находящийся в архиве.
Последняя строка содержит единственную бинарную строку $t$ длины $k$, представляющую целевой код награды, который нужно создать.
Выходные данные
Если невозможно создать целевой код $t$, выведите одну строку, содержащую NO.
В противном случае выведите YES. На следующей строке выведите целое число $m$ ($0 \le m \le 10^5$), обозначающее общее количество операций, которые вы будете использовать. Затем выведите $m$ строк, описывающих ваши операции по порядку:
1 x: Выберите существующий код с индексом $x$ и примените инверсию фазы (добавьте побитовое дополнение $x$);2 x y z: Выберите существующие коды с индексами $x$, $y$ и $z$ и примените триангуляцию сигнала (добавьте $\operatorname{maj}$ существующих строк с индексами $x$, $y$ и $z$).
Каждый используемый вами индекс должен уже существовать в архиве на момент его использования. После всех $m$ операций хотя бы один код в архиве должен полностью совпадать с вашей целью $t$. Если целевой код $t$ уже присутствует в начальном архиве, вы можете просто вывести $m = 0$.
Если существует несколько корректных способов создать код, вы можете вывести любую допустимую последовательность операций.
Примеры
Входные данные 1
3 4 1000 0100 0010 1111
Выходные данные 1
YES 4 1 1 1 2 1 3 2 4 5 6
Примечание
- Первые три операции добавляют дополнения исходных строк, создавая
0111,1011и1101. - Последняя операция берёт побитовую мажоритарную функцию этих трёх строк.
- В каждой позиции хотя бы две из них имеют бит $1$, поэтому добавленная строка равна
1111, что и является целью.