Jesteś w trakcie włamywania się do terminalu danych Czerwonego Syndykatu Smoka. Archiwum terminalu, oznaczone jako $S$, początkowo zawiera $n$ zaszyfrowanych częstotliwości sygnału, każdą reprezentowaną jako binarny ciąg długości $k$. Te początkowe częstotliwości są indeksowane od $1$ do $n$ w dokładnej kolejności, w jakiej zostały wyodrębnione z pamięci terminalu. Aby włamać się do rdzenia, musisz syntezować nowe częstotliwości i wprowadzić je do archiwum. Każda operacja syntezy dodaje dokładnie jeden nowy binarny ciąg do $S$, automatycznie przypisując mu następny dostępny indeks całkowity.
Masz do dyspozycji dwie operacje:
- Inwersja fazy: Wybierz istniejącą częstotliwość $s$ i dodaj jej dokładną negację bitową (Niech $s$ będzie binarnym ciągiem długości $k$, takim że $s = s_1 s_2 \dots s_k$, gdzie każdy bit $s_i \in \{0, 1\}$. Negacja bitowa $s$, często oznaczana matematycznie jako $\neg s$, jest zdefiniowana jako nowy binarny ciąg długości $k$, w którym wartość $i$-tego bitu wynosi dokładnie $1 - s_i$.);
- Triangulacja sygnału: Wybierz trzy istniejące częstotliwości $u$, $v$ i $w$ (niekoniecznie różne) i dodaj ich bitową większość, oznaczoną jako $\operatorname{maj}(u,v,w)$. Dla każdej pozycji bitu $i$ operacja oblicza: $$\operatorname{maj}(u,v,w)_i = \operatorname{maj}(u_i,v_i,w_i).$$ Dla pojedynczych bitów $a$, $b$, $c$, $\operatorname{maj}(a,b,c)$ wynosi $1$, jeśli co najmniej dwa z nich są $1$, a $0$ w przeciwnym razie.
Twoim celem jest ustalenie, czy możliwe jest sfałszowanie konkretnego docelowego kodu nagrody $t$ o długości $k$. Jeśli jest to możliwe, musisz podać sekwencję operacji (co najwyżej $10^5$), która pomyślnie go utworzy.
Wejście
Pierwszy wiersz kanału terminalu zawiera dwie liczby całkowite $n$ i $k$ ($1 \le n, k \le 200$), reprezentujące liczbę początkowych kodów oraz długość każdego kodu.
Każdy z kolejnych $n$ wierszy zawiera binarny ciąg (złożony z 0 i 1) długości $k$, przedstawiający kod znajdujący się obecnie w archiwum.
Ostatni wiersz zawiera pojedynczy binarny ciąg $t$ długości $k$, reprezentujący docelowy kod nagrody, który musisz sfałszować.
Wyjście
Jeśli nie jest możliwe sfałszowanie docelowego kodu $t$, wypisz pojedynczy wiersz zawierający NO.
W przeciwnym razie wypisz YES. W następnym wierszu wypisz liczbę całkowitą $m$ ($0 \le m \le 10^5$), reprezentującą całkowitą liczbę operacji, których użyjesz. Następnie wypisz $m$ wierszy opisujących twoje operacje w kolejności:
1 x: Wybierz istniejący kod o indeksie $x$ i zastosuj Inwersję fazy (dodaj negację bitową $x$);2 x y z: Wybierz istniejące kody o indeksach $x$, $y$ i $z$ i zastosuj Triangulację sygnału (dodaj $\operatorname{maj}$ istniejących ciągów o indeksach $x$, $y$ i $z$).
Każdy używany indeks musi już istnieć w archiwum w momencie jego użycia. Po wykonaniu wszystkich $m$ operacji co najmniej jeden kod w archiwum musi dokładnie odpowiadać twojemu docelowemu kodowi $t$. Jeśli docelowy kod $t$ znajduje się już w początkowym archiwum, możesz po prostu wypisać $m = 0$.
Jeżeli istnieje wiele poprawnych sposobów na sfałszowanie kodu, możesz wypisać dowolny prawidłowy ciąg operacji.
Przykład
Wejście 1
3 4 1000 0100 0010 1111
Wyjście 1
YES 4 1 1 1 2 1 3 2 4 5 6
Uwagi
- Pierwsze trzy operacje dodają negacje początkowych ciągów, tworząc
0111,1011i1101. - Ostatnia operacja bierze bitową większość tych trzech ciągów.
- Na każdej pozycji co najmniej dwa z nich mają bit $1$, więc dodany ciąg to
1111, czyli cel.