QOJ.ac

QOJ

حد الوقت: 1 s حد الذاكرة: 1024 MB مجموع النقاط: 100 قابلة للهجوم ✓

#18518. The Real Folk Blues

الإحصائيات

Вы взламываете терминал данных Красного Драконьего Синдиката. Архив терминала, обозначаемый как $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, что и является целью.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.