Estás hackeando un terminal de datos de la Sindicato del Dragón Rojo. El archivo del terminal, denotado como $S$, contiene inicialmente $n$ frecuencias de señales cifradas, cada una representada como una cadena binaria de longitud $k$. Estas frecuencias iniciales están indexadas desde $1$ hasta $n$ en el orden exacto en que se extraen de la memoria del terminal. Para vulnerar el núcleo, debes sintetizar nuevas frecuencias e inyectarlas en el archivo. Cada operación de síntesis agrega exactamente una nueva cadena binaria a $S$, asignándole automáticamente el siguiente índice entero disponible.
Dispones de dos operaciones:
- Inversión de fase: Selecciona una frecuencia existente $s$ y agrega su complemento bit a bit exacto (Sea $s$ una cadena binaria de longitud $k$, tal que $s = s_1 s_2 \dots s_k$ donde cada bit $s_i \in \{0, 1\}$. El complemento bit a bit de $s$, a menudo denotado matemáticamente como $\neg s$, se define como una nueva cadena binaria de longitud $k$ donde el valor del $i$-ésimo bit es exactamente $1 - s_i$.);
- Triangulación de señal: Selecciona tres frecuencias existentes $u$, $v$ y $w$ (no necesariamente distintas) y agrega su mayoría bit a bit, denotada como $\operatorname{maj}(u,v,w)$. Para cada posición de bit $i$, la operación evalúa: $$\operatorname{maj}(u,v,w)_i = \operatorname{maj}(u_i,v_i,w_i).$$ Para bits individuales $a$, $b$, $c$, $\operatorname{maj}(a,b,c)$ es $1$ si al menos dos de ellos son $1$, y $0$ en caso contrario.
Tu objetivo es determinar si es posible forjar un código de recompensa objetivo específico $t$ de longitud $k$. Si es posible, debes proporcionar una secuencia de operaciones (como máximo $10^5$) que lo construya exitosamente.
Entrada
La primera línea del flujo del terminal contiene dos enteros $n$ y $k$ ($1 \le n, k \le 200$), que representan el número de códigos iniciales y la longitud de cada código.
Cada una de las siguientes $n$ líneas contiene una cadena binaria (solo 0s y 1s) de longitud $k$, que muestra un código actualmente en el archivo.
La última línea contiene una única cadena binaria $t$ de longitud $k$, que representa el código de recompensa objetivo que necesitas forjar.
Salida
Si es imposible forjar el código objetivo $t$, imprime una única línea que contenga NO.
En caso contrario, imprime YES. En la siguiente línea, imprime un entero $m$ ($0 \le m \le 10^5$), que representa el número total de operaciones que usarás. Luego, imprime $m$ líneas describiendo tus operaciones en orden:
1 x: Toma el código existente en el índice $x$ y aplica Inversión de fase (agrega el complemento bit a bit de $x$);2 x y z: Toma los códigos existentes en los índices $x$, $y$ y $z$ y aplica Triangulación de señal (agrega $\operatorname{maj}$ de las cadenas existentes con índices $x$, $y$ y $z$).
Cada índice que uses debe existir en el archivo en el momento en que lo uses. Después de todas las $m$ operaciones, al menos un código en el archivo debe coincidir exactamente con tu objetivo $t$. Si el código objetivo $t$ ya está en el archivo inicial, puedes simplemente imprimir $m = 0$.
Si hay varias formas correctas de forjar el código, puedes imprimir cualquier secuencia válida de operaciones.
Ejemplos
Entrada 1
3 4 1000 0100 0010 1111
Salida 1
YES 4 1 1 1 2 1 3 2 4 5 6
Nota
- Las primeras tres operaciones agregan los complementos de las cadenas iniciales, creando
0111,1011y1101. - La última operación toma la mayoría bit a bit de estas tres cadenas.
- En cada posición al menos dos de ellas tienen el bit $1$, por lo que la cadena agregada es
1111, que es el objetivo.