AT_xmascon20_i Implement Me
Description
[problemUrl]: https://atcoder.jp/contests/xmascon20/tasks/xmascon20_i
正の整数 $ M,\ L $ が与えられる.$ M $ 変数ブール関数 $ F\colon\ \{0,\ 1\}^M\ \to\ \{0,\ 1\} $ を次のように定める:$ F(x_0,\ \ldots,\ x_{M-1}) $ は $ x_0,\ \ldots,\ x_{M-1} $ のうち **$ 1 $ が $ L $ 個以上であるとき $ 0 $ であり,$ 1 $ が $ L $ 個未満であるとき $ 1 $ である**.
また,正の整数 $ N $ および $ N $ 変数ブール関数 $ G\colon\ \{0,\ 1\}^N\ \to\ \{0,\ 1\} $ が与えられる.$ F $ だけを使って,$ G $ を実現する以下の仕様を満たすプログラムを $ 1 $ つ求めよ.そのようなプログラムが存在しない場合はそれを指摘せよ.
プログラムは $ 10^4 $ 個のブール変数 $ a[0],\ \ldots,\ a[10^4-1] $ を扱うことができる.プログラムは $ 0 $ 個以上 $ 10^4 $ 個以下の命令からなり,それらが順に実行される.各命令は添え字 $ j,\ i_0,\ \ldots,\ i_{M-1} $ によって表され,$ F(a[i_0],\ \ldots,\ a[i_{M-1}]) $ を計算し,その結果を $ a[j] $ に代入することを意味する.
任意の $ (y_0,\ \ldots,\ y_{N-1})\ \in\ \{0,\ 1\}^N $ に対し,プログラムの実行開始時に $ a[0],\ \ldots,\ a[N-1] $ の値が入力 $ y_0,\ \ldots,\ y_{N-1} $ であり他の変数が初期化されていない場合,実行終了時に $ a[N] $ の値が $ G(y_0,\ \ldots,\ y_{N-1}) $ でなければならない.また,実行の途中で初期化も代入もされていない変数を $ F $ の引数に渡してはならない.
**[簡易的な出力チェッカーがここから利用可能である.](http://hos.ac/contest/xmas2020/implement_me.html)**
Input Format
入力は以下の形式で標準入力から与えられる.
> $ M $ $ L $ $ N $ $ G $
$ G $ は `0` と `1` からなる長さ $ 2^N $ の文字列として表される.各 $ (y_0,\ \ldots,\ y_{N-1})\ \in\ \{0,\ 1\}^N $ に対し,$ \left(1\ +\ \sum_{k=0}^{N-1}\ 2^k\ y_k\right) $ 文字目は $ G(y_0,\ \ldots,\ y_{N-1}) $ の値を表す.
Output Format
条件を満たすプログラムが存在しない場合は,`-1` と出力せよ.
条件を満たすプログラムが存在する場合は,そのうち $ 1 $ つを次の形式で出力せよ:**$ 1 $ 行目に命令の個数 $ p $ を出力し,**続く $ p $ 行に実行する順に命令を出力する.各命令はそれを表す添え字 $ j,\ i_0,\ \ldots,\ i_{M-1} $ をこの順に空白区切りで出力する.
**[簡易的な出力チェッカーがここから利用可能である.](http://hos.ac/contest/xmas2020/implement_me.html)**
Explanation/Hint
### 制約
- $ 1\ \le\ M\ \le\ 8 $.
- $ 1\ \le\ L\ \le\ M $.
- $ 1\ \le\ N\ \le\ 8 $.
### 部分点
- $ N\ \le\ 2 $ を満たすデータセットに正解した場合は,$ 10 $ 点が与えられる.
- 追加制約のないデータセットに正解した場合は,上記とは別に $ 90 $ 点が与えられる.
### Sample Explanation 1
この例では,$ F(x_0,\ x_1)\ =\ (x_0\ \operatorname{NOR}\ x_1) $,$ G(y_0,\ y_1,\ y_2)\ =\ (y_0\ \operatorname{AND}\ y_2) $ である.