Bạn đang xâm nhập vào thiết bị đầu cuối dữ liệu của tổ chức Red Dragon Syndicate. Kho lưu trữ của thiết bị, ký hiệu là $S$, ban đầu chứa $n$ tần số tín hiệu đã được mã hóa, mỗi tần số được biểu diễn dưới dạng một xâu nhị phân độ dài $k$. Các tần số ban đầu này được đánh chỉ số từ $1$ đến $n$ theo đúng thứ tự chúng được trích xuất từ bộ nhớ của thiết bị. Để phá vỡ lõi, bạn phải tổng hợp các tần số mới và đưa chúng vào kho lưu trữ. Mỗi thao tác tổng hợp sẽ thêm chính xác một xâu nhị phân mới vào $S$ và tự động gán cho nó chỉ số nguyên dương tiếp theo.
Bạn được trang bị hai thao tác:
- Đảo pha: Chọn một tần số $s$ đã tồn tại và thêm phần bù bit chính xác của nó (Cho $s$ là một xâu nhị phân độ dài $k$, với $s = s_1 s_2 \dots s_k$ trong đó mỗi bit $s_i \in \{0, 1\}$. Phần bù bit của $s$, thường được ký hiệu toán học là $\neg s$, được định nghĩa là một xâu nhị phân mới độ dài $k$ với giá trị của bit thứ $i$ là $1 - s_i$.);
- Tam giác hóa tín hiệu: Chọn ba tần số đã tồn tại $u$, $v$ và $w$ (không nhất thiết phải phân biệt) và thêm phần lớn bit của chúng, ký hiệu là $\operatorname{maj}(u,v,w)$. Với mỗi vị trí bit $i$, thao tác được tính như sau: $$\operatorname{maj}(u,v,w)_i = \operatorname{maj}(u_i,v_i,w_i).$$ Với các bit đơn lẻ $a$, $b$, $c$, $\operatorname{maj}(a,b,c)$ là $1$ nếu có ít nhất hai bit là $1$, và $0$ trong trường hợp còn lại.
Mục tiêu của bạn là xác định xem có thể tạo ra được một mã tiền thưởng mục tiêu $t$ độ dài $k$ hay không. Nếu có thể, bạn cần đưa ra một dãy thao tác (tối đa $10^5$) để xây dựng thành công mã đó.
Dữ liệu vào
Dòng đầu tiên của luồng dữ liệu từ thiết bị chứa hai số nguyên $n$ và $k$ ($1 \le n, k \le 200$), biểu diễn số lượng mã ban đầu và độ dài của mỗi mã.
Mỗi dòng trong số $n$ dòng tiếp theo chứa một xâu nhị phân (các ký tự 0 và 1) độ dài $k$, thể hiện một mã hiện có trong kho lưu trữ.
Dòng cuối cùng chứa một xâu nhị phân $t$ độ dài $k$, biểu diễn mã tiền thưởng mục tiêu bạn cần tạo ra.
Dữ liệu ra
Nếu không thể tạo ra mã mục tiêu $t$, in ra một dòng duy nhất chứa NO.
Ngược lại, in ra YES. Trên dòng tiếp theo, in ra một số nguyên $m$ ($0 \le m \le 10^5$), biểu diễn tổng số thao tác bạn sẽ sử dụng. Sau đó, in ra $m$ dòng mô tả các thao tác theo thứ tự:
1 x: Chọn mã đã tồn tại ở chỉ số $x$ và thực hiện Đảo pha (thêm phần bù bit của $x$);2 x y z: Chọn các mã đã tồn tại ở chỉ số $x$, $y$ và $z$ và thực hiện Tam giác hóa tín hiệu (thêm $\operatorname{maj}$ của các xâu đã có với chỉ số $x$, $y$, $z$).
Mỗi chỉ số bạn sử dụng phải đã tồn tại trong kho lưu trữ tại thời điểm bạn sử dụng nó. Sau tất cả $m$ thao tác, ít nhất một mã trong kho lưu trữ phải khớp chính xác với mã mục tiêu $t$. Nếu mã mục tiêu $t$ đã có trong kho lưu trữ ban đầu, bạn chỉ cần xuất ra $m = 0$.
Nếu có nhiều cách tạo ra mã, bạn có thể in ra bất kỳ dãy thao tác hợp lệ nào.
Ví dụ
Dữ liệu vào 1
3 4 1000 0100 0010 1111
Dữ liệu ra 1
YES 4 1 1 1 2 1 3 2 4 5 6
Ghi chú
- Ba thao tác đầu tiên thêm phần bù của các xâu ban đầu, tạo ra
0111,1011và1101. - Thao tác cuối cùng lấy phần lớn bit của ba xâu này.
- Tại mọi vị trí, có ít nhất hai trong số chúng có bit $1$, do đó xâu được thêm vào là
1111, chính là mã mục tiêu.