A - Additive-Subtractive Stamps

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

うさぎは昨年一昨年のように,Xmas Contest 2020 を記念した看板を作ろうとしている.

そういえば,去年はたくさんの種類のスタンプを使って遊んだなあ…….

問題文

与えられたスタンプだけを高々 20\,000 回使うことで,以下の領域マップに沿った画像を作り上げよ.後述の達成条件を満たしていれば,カラフルな画像にしてもよい.

131406f65c283f8139f6242ce0e06523.png

キャンバスとスタンプ

画像を作るためのキャンバスは横 800 px,縦 400 px であり,画素の位置は整数の組 (x, y) (0 \le x < 8000 \le y < 400) で表される.x 座標が増える方向が左から右へ,y 座標が増える方向が上から下へであることに注意せよ.各画素は色を表す R, G, B3 要素を持つ.はじめ,キャンバスのどの要素も R, G, B の値はすべて 0 である.

スタンプは大きさ s と,色情報 r, g, b4 つの整数によって表される.1 回のスタンプ操作では,キャンバスの指定した位置にスタンプを押すか,指定した位置からスタンプを引くことができる.

より詳細には,あるスタンプ (s, r, g, b) を位置 (x_i, y_i) に 押した/引いた 場合,x_i \le x < x_i + s かつ y_i \le y < y_i + s を満たすすべての画素 (x, y) に対し,その画素の R, G, B の値にそれぞれ r, g, b が 加算/減算 される.操作の結果,ある画素の値が 255 を上回った場合は 255 に,0 を下回った場合は 0 になる.

達成条件

領域マップにおいて,同じ色からなる画素の 4 方向に連結な成分を領域と呼ぶ.ある画像が「領域マップに沿った」とみなされるためには次のようになっている必要がある.

  • それぞれの領域内はある程度同じ色で塗られている.
  • 隣り合う領域はある程度異なる色で塗られている.

厳密には,画像が以下の 2 条件をどちらも満たしていればよい:

  • 領域内条件:それぞれの領域に対し,領域内の画素すべての R の値の分散が 700 以下であること.また,G の分散と B の分散も同様に 700 以下であること.
  • 隣接領域条件:ある領域の平均色を,領域内の画素すべての R, G, B の (要素ごとの) 平均値とする.領域マップにおいて隣接する 2 つの領域の平均色をそれぞれ (R_1, G_1, B_1) および (R_2, G_2, B_2) とすると,(R_1 - R_2)^2 + (G_1 - G_2)^2 + (B_1 - B_2)^2 \ge 80^2 が成り立つこと.

データ

この問題を解くために必要なデータをまとめた zip ファイルがこちらからダウンロードできる.zip 内には以下のファイルが入っている.

  • stamps/map.png: 領域マップを表す画像.画像サイズは横 800 px,縦 400 px である.
  • stamps/map.txt: 領域マップに対応する,各画素にその領域 ID を振ったテキストファイル.
    • 400 行からなり,各行に 800 個の整数が書かれている.
  • stamps/stampset.txt: 使えるスタンプの一覧を表すテキストファイル.
    • 1 行目にはスタンプの種類数 K が書かれている.
    • 続く K 行には,各行に 5 個の整数 k, s, r, g, b が書かれている.これはスタンプ ID が k であるスタンプが (s, r, g, b) で表されることを意味する.スタンプはスタンプ ID の昇順に書かれている.
  • stamps/play.html: ビジュアライザ兼手作業用ツール.操作列の可視化や,達成条件の判定などの機能も備えているので,少なくとも提出前には使うことが推奨される.
    • 左下に「スタンプ操作をロードする」機能がある.これは正しいスタンプ操作を表す行だけをすべて読み込む (よって,後述の出力形式に従ったものを入れたときは,最初の行は単に読み飛ばされる).
  • stamps/play.js: ビジュアライザ兼手作業用ツールのソースコード.

制約

上記のデータが満たす条件のうち,一部の重要な情報を以下に示す.

  • 画像サイズは横 800 px,縦 400 px である.
  • 領域の個数は 30 であり,領域 ID は 0, \ldots, 29 である.
  • 同じ領域 ID が振られた画素の集合は 4 方向に連結である.
  • スタンプの種類数は 18 であり,スタンプ ID は 0, \ldots, 17 である.
  • 各スタンプにおいて,以下が成り立つ:
    • 7 \le s \le 50
    • 0 \le r \le 40
    • 0 \le g \le 40
    • 0 \le b \le 40

入力

この問題では入力は与えられない.

出力

p
k_1 x_1 y_1 t_1
\vdots
k_p x_p y_p t_p

1 行目に,スタンプ操作の回数を表す整数 p (0 \le p \le 20\,000) を出力せよ.

続く p 行のうち i (1 \le i \le p) 行目には,i 回目のスタンプ操作を表す 4 つの整数 k_i, x_i, y_i, t_i を空白区切りで出力せよ.これは,i 回目の操作では位置 (x_i, y_i) に ID k_i のスタンプを使うことを表す.t_i = 1 の場合はスタンプを押す操作,t_i = -1 の場合はスタンプを引く操作を表す.

スタンプは少なくとも 1 個の画素を覆う位置で使わなければならない.すなわち,ID k_i のスタンプの大きさが s のとき,-s < x_i < 800 かつ -s < y_i < 400 でなければならない.


入力例 1


出力例 1

4
0 100 200 1
1 -10 5 1
2 799 300 -1
0 100 200 1

これは上記の書式の条件を満たす出力の例である (ただし,この出力は達成条件を満たしていないので WA になる).

B - Beterminant

Time Limit: 1 sec / Memory Limit: 1024 MB

配点 : 100

くじらはギャンブルに挑戦するか考えています.負けず嫌いのくじらは,1 円でもいいから勝つことを目標にしたのでした.

問題文

1 回の賭けで「所持金が 1 円減る.確率 P % で所持金が W 円増え (あたり),(100 - P) % で何ももらえない (はずれ)」となるものがある.なお,所持金は任意の整数値をとりうる.

正の整数 n であって以下の条件を満たすもののうち,最大のものを求めよ.ただし,条件を満たす n が存在しない場合は -1 と答えよ.また,条件を満たす n が無限個存在する場合は -2 と答えよ.

条件.最初,くじらの所持金は 0 円である.くじらが n 回この賭けを行う (各賭けでの確率は独立である).このとき,「最終的なくじらの所持金が 0 円より真に多い確率」が \frac{1}{2} より真に大きい.

制約

  • 0 \le P \le 100
  • 0 \le W \le 100
  • P, W は整数である.

入力

入力は以下の形式で標準入力から与えられる.

P W

出力

問題文の条件を満たす最大の n を求めよ.ただし,条件を満たす n が存在しない場合は -1 を,条件を満たす n が無限個存在する場合は -2 を,代わりに出力せよ.


入力例 1

30 3

出力例 1

2

n = 2 は条件を満たす.以下のように,最終的なくじらの所持金が 0 円より真に多い確率が \frac{51}{100} となるからである:

  • 1 回目であたり 2 回目であたる確率は \frac{9}{100},このとき最終的な所持金は 4 円となる.
  • 1 回目であたり 2 回目ではずれる確率は \frac{21}{100},このとき最終的な所持金は 1 円となる.
  • 1 回目ではずれて 2 回目であたる確率は \frac{21}{100},このとき最終的な所持金は 1 円となる.
  • 1 回目ではずれて 2 回目ではずれる確率は \frac{49}{100},このとき最終的な所持金は -2 円となる.

一方,n > 2 のときは条件を満たさないことが証明できる.よって求める最大の n2 である.


入力例 2

20 3

出力例 2

-1

入力例 3

40 3

出力例 3

-2
C - Candies Candidates

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

うさぎたちはキャンディを取り合うときも美しさにこだわります.

問題文

T 個のテストケースが与えられる.各テストケースで整数 N と整数 A_1, \ldots, A_N が与えられるので,以下の問に答えよ.

N 個の皿が並んでいて,i 番目の皿には最初キャンディが A_i 個置かれている.くろうさとしろうさがゲームをする.くろうさが先手で,交互に以下の行動をする.

行動.キャンディが 1 個以上置かれている皿を 1 個選び,その皿のキャンディの個数を x とする.その皿のキャンディの残り個数が x - 1 または \left\lfloor \frac{\sqrt{5} - 1}{2} x \right\rfloor になるようにキャンディを減らす (\lfloor y \rfloory を超えない最大の整数を表す).取ったキャンディは他の皿に足したりせずすべて食べる.

行動ができなくなった方が負けで,負けなかった方が勝ちである.くろうさとしろうさのどちらに必勝法があるか?

制約

  • 1 \le T \le 100
  • 1 \le N \le 20
  • 1 \le A_i \le 10^{18} (1 \le i \le N).

入力

標準入力の 1 行目にテストケースの個数 T が与えられる.その後,T 個のテストケースがそれぞれ以下の形式で与えられる.

N
A_1 \cdots A_N

出力

各テストケースについて,くろうさに必勝法がある場合は Black,しろうさに必勝法がある場合は White1 行に出力せよ.


入力例 1

2
2
5 9
4
20 15 10 5

出力例 1

Black
White

1 番目のテストケースでは,くろうさの最初の行動としては以下のいずれかが可能である:

  • 1 番目の皿のキャンディの残り個数を 5 - 1 = 4 にする (1 個食べる).
  • 1 番目の皿のキャンディの残り個数を \left\lfloor \frac{\sqrt{5} - 1}{2} \cdot 5 \right\rfloor = 3 にする (2 個食べる).
  • 2 番目の皿のキャンディの残り個数を 9 - 1 = 8 にする (1 個食べる).
  • 2 番目の皿のキャンディの残り個数を \left\lfloor \frac{\sqrt{5} - 1}{2} \cdot 9 \right\rfloor = 5 にする (4 個食べる).

くろうさは,このうち例えば 2 番目の皿のキャンディの残り個数を 5 にする行動を選ぶと,その後しろうさの行動によらず必ず勝つ方法が存在する.

D - Determinant

Time Limit: 5 sec / Memory Limit: 1024 MB

配点 : 100

巨大な行列の行列式を求めることに成功したうさぎは,うれしくなって問題にしてしまいました.

問題文

正の整数 N と整数 C が与えられる.N \times N 行列 A を次のように定める: (i, j) 成分 (1 \le i \le N1 \le j \le N) は

  • i = j のとき 1
  • ji で割り切れないとき C
  • 上のいずれでもない場合 0

このとき,\det A998244353 で割った余り (0 以上 998244353 未満) を求めよ.

制約

  • 1 \le N \le 10^9
  • 0 \le C < 998244353

部分点

  • N \le 10^5 を満たすデータセットに正解した場合は,20 点が与えられる.
  • 追加制約のないデータセットに正解した場合は,上記とは別に 80 点が与えられる.

入力

入力は以下の形式で標準入力から与えられる.

N C

出力

\det A998244353 で割った余り (0 以上 998244353 未満) を出力せよ.


入力例 1

6 3

出力例 1

998244345

A = \begin{bmatrix}1&0&0&0&0&0\\3&1&3&0&3&0\\3&3&1&3&3&0\\3&3&3&1&3&3\\3&3&3&3&1&3\\3&3&3&3&3&1\end{bmatrix} であり,\det A = -8 となる.


入力例 2

2020 11

出力例 2

515894850

入力例 3

1000000000 2020

出力例 3

4909496
E - Eternal Dice

Time Limit: 5 sec / Memory Limit: 1024 MB

配点 : 100

うさぎたちがいろいろな種類のサイコロを使うことはよく知られていますが,サイは本当にたくさんの種類を持っているようです.

問題文

正の整数 N, A が与えられる.

m を正の整数とする.サイは 1 から m までの番号のついた m 個の特殊なサイコロを持っている.これからサイは,それぞれのサイコロを A 回ずつ振る.サイコロ i (1 \le i \le m) を 1 回振るたびに,\frac{1}{i^2} の確率であたりが出る.これらの試行の結果はすべて独立な事象である.

合計でちょうど N 回あたりが出る確率はいくつだろうか? この値は m に依存するが,m が限りなく大きくなるときのこの確率の極限を求めよ.

この極限の値を p とおくと,有理数 c_0, \ldots, c_{N-1} であって p = \sum_{j=0}^{N-1} c_j \pi^j となるものが一意に存在することが証明できる (\pi は円周率).この c_0, \ldots, c_{N-1}\operatorname{mod} 998244353 で出力せよ.

有理数を \operatorname{mod} 998244353 で出力する際は,それを既約分数 \frac{x}{y} で表したとき,x - y z998244353 で割り切れるような 0 以上 998244353 未満の整数 z を出力せよ.この問題の制約によって,出力すべき値は一意に定まることが証明できる.

制約

  • 1 \le A \le N \le 250\,000

部分点

  • N \le 100 かつ A = 1 を満たすデータセットに正解した場合は,10 点が与えられる.
  • A = 1 を満たすデータセットに正解した場合は,上記とは別に 10 点が与えられる.
  • 追加制約のないデータセットに正解した場合は,上記とは別に 80 点が与えられる.

入力

入力は以下の形式で標準入力から与えられる.

N A

出力

c_0, \ldots, c_{N-1} を,この順に空白区切りで,\operatorname{mod} 998244353 で出力せよ.


入力例 1

1 1

出力例 1

499122177

p = \frac{1}{2} である.


入力例 2

2 1

出力例 2

623902721 0

p = \frac{3}{8} である.


入力例 3

3 1

出力例 3

686292993 0 353544875

p = \frac{5}{16} - \frac{1}{48} \pi^2 である.


入力例 4

3 2

出力例 4

623902721 0 0

p = \frac{3}{8} である.


入力例 5

10 5

出力例 5

748591874 0 809083222 0 440705764 0 0 0 0 0
F - Famous in Russia

Time Limit: 5 sec / Memory Limit: 1024 MB

配点 : 100

動物たちは,今年もクリスマスコンテストに向けてプログラミング練習会を行っています.

問題文

カナリアは以下のような問題を作った.


Fox the Optimizing Chef

長さ N の整数列 A = (A_1, \ldots, A_N)B = (B_1, \ldots, B_N) が与えられます.

きつねは,あるレストランを経営しています.今このレストランには,1 から N までの番号のついた N 人の客がいます.客 i は,調理に A_i 単位時間かかる料理を注文し,料理を食べるのに B_i 単位時間かかります.

各整数 k (1 \le k \le N) について,以下の問題を解いてください.

きつねが k 人の客を選び,選ばなかった N - k 人を帰宅させます.そして,k 人のための料理を好きな順で作っていきます.2 個以上の料理を同時に作ることはできません.客は,自分の料理が完成した瞬間に食事を開始します.きつねの労働時間は,「最初の料理を作り始めてから,k 人の客すべてが食事を終えるまでの時間」です.きつねの労働時間の最小値を求めてください.


しかし,この問題はロシアの国内コンテストでほぼ既出であることが発覚した.そこで,カナリアは問題を以下のように変形した.


Fox the Counting Chef

整数 V と,長さ N の整数列 B = (B_1, \ldots, B_N) が与えられます.

長さが N で各要素が 1 以上 V 以下の整数列 A = (A_1, \ldots, A_N)V^N 通り存在しますが,それぞれの A に対し (与えられた B とともに) 問題 "Fox the Optimizing Chef" を解き,各整数 k (1 \le k \le N) についてその答えの総和を 998244353 で割った余りを求めてください.


問題 "Fox the Counting Chef" を解け.

制約

  • 1 \le N \le 30
  • 1 \le V \le 20
  • 1 \le B_i \le 600 (1 \le i \le N).

入力

入力は以下の形式で標準入力から与えられる.

N V
B_1 B_2 \cdots B_N

出力

k = 1, \ldots, N についての答えを,この順に空白区切りで出力せよ.


入力例 1

2 2
1 2

出力例 1

10 16

k = 2 の場合を考える.各 A に対する元の問題の答えは以下のようになる:

  • A = (1, 1):労働時間の最小値は 3
  • A = (1, 2):労働時間の最小値は 4
  • A = (2, 1):労働時間の最小値は 4
  • A = (2, 2):労働時間の最小値は 5

よって,3 + 4 + 4 + 5 = 16 を出力する.


入力例 2

3 5
1 2 4

出力例 2

448 787 1255

入力例 3

10 10
14 38 45 9 19 18 7 18 33 21

出力例 3

663655052 615617049 323725023 554911324 803518888 499232802 916051842 54293837 639852351 260050903
G - Graph Products

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

くろうさ「グラフが複数与えられる問題で頂点数と辺数が横に並んでると切れ目がわかりにくくない? この革新的で親切なフォーマット,感謝してほしい」

しろうさ「サンプルの中身を親切にして」

問題文

この問題では,グラフは無向単純グラフのみを考える.グラフ H, H' に対し,グラフ H \mathbin{\square} H'H \times H' を以下のように定義する.H, H' の頂点集合をそれぞれ V(H), V(H') と書く.W = V(H) \times V(H') (すなわち「H の頂点と H' の頂点の組」全体の集合) とおく.

H \mathbin{\square} H' の頂点集合は W であり,H \mathbin{\square} H' において頂点 (u, u') \in W(v, v') \in W を結ぶ辺があるための必要十分条件は,以下のいずれかが成り立つことである:

  • u = v,かつ,H' において頂点 u' と頂点 v' を結ぶ辺がある.
  • u' = v',かつ,H において頂点 u と頂点 v を結ぶ辺がある.

H \times H' の頂点集合は W であり,H \times H' において頂点 (u, u') \in W(v, v') \in W を結ぶ辺があるための必要十分条件は,「H において頂点 u と頂点 v を結ぶ辺があり,かつ,H' において頂点 u' と頂点 v' を結ぶ辺があること」である.

K 個のグラフ G_1, \ldots, G_K が与えられる.各 k (1 \le k \le K) に対し,G_k の頂点集合は \{1, \ldots, N_k\} であり,G_kM_k 本の辺を持ちその i 番目 (1 \le i \le M_k) は頂点 A_{k,i}B_{k,i} を結ぶ.

k, k' (1 \le k \le K1 \le k' \le K) に対し,グラフ G_k \mathbin{\square} G_{k'}G_k \times G_{k'} が同型であるか判定せよ (すなわち,全単射 f\colon V(G_k) \times V(G_{k'}) \to V(G_k) \times V(G_{k'}) であって,任意の (u, u'), (v, v') \in V(G_k) \times V(G_{k'}) に対し「G_k \mathbin{\square} G_{k'} において頂点 (u, u') と頂点 (v, v') を結ぶ辺があること」と「G_k \times G_{k'} において頂点 f((u, u')) と頂点 f((v, v')) を結ぶ辺があること」が同値となるようなものが存在するか判定せよ).

制約

  • 1 \le K \le 10
  • 1 \le N_k \le 25\,000 (1 \le k \le K).
  • 0 \le M_k \le 25\,000 (1 \le k \le K).
  • 1 \le A_{k,i} < B_{k,i} \le N_k (1 \le k \le K1 \le i \le M_k).
  • 1 \le k \le K に対し,M_k 個の組 (A_{k,i}, B_{k,i}) (1 \le i \le M_k) はすべて異なる.

入力

入力は以下の形式で標準入力から与えられる.

K
N_1
M_1
A_{1,1} B_{1,1}
\vdots
A_{1,M_1} B_{1,M_1}
\vdots
N_K
M_K
A_{K,1} B_{K,1}
\vdots
A_{K,M_K} B_{K,M_K}

出力

出力は K 行からなり,各行は K 文字からなる.k 行目 (1 \le k \le K) の k' 文字目 (1 \le k' \le K) には,G_k \mathbin{\square} G_{k'}G_k \times G_{k'} が同型である場合は 1 を,同型でない場合は 0 を出力せよ.


入力例 1

5
3
2
1 2
2 3
4
3
1 2
2 3
3 4
5
5
1 2
1 3
2 4
3 5
2 3
8
6
1 2
5 8
1 6
4 8
2 7
6 7
6
9
1 3
3 5
1 5
1 2
2 3
3 4
4 5
5 6
1 6

出力例 1

00000
00000
00000
00000
00000
H - Hierarchical Phylogeny

Time Limit: 6 sec / Memory Limit: 1024 MB

配点 : 100

生物学の研究をしていたうなぎは,ある生物たちの分類を表す系統樹を数えたくなりました.うなぎの研究においてこれ以上分類できないとしてもよい種の集合や,系統樹作成の対象となる集合がいくつかリストアップされています.もちろんうなぎだって数え上げが苦手ではないのですが,今日は急ぎの事情があってとても高速に数えなければなりません.

問題文

正の整数 N が与えられる.\{0, \ldots, N - 1\} の空でない部分集合それぞれについて,「葉にふさわしいか否か」「根にふさわしいか否か」がそれぞれ決まっている.

根付き木の各頂点に \{0, \ldots, N - 1\} の空でない部分集合 1 個がラベルとして書かれたものであって,以下の条件をすべて満たすものの個数を 998244353 で割った余りを求めよ:

  • 各頂点の子は 0 個または 2 個である.
  • 子が 0 個の頂点のラベルは葉にふさわしい.
  • 子が 2 個の頂点に対し次が成り立つ:その頂点のラベルを A,子のラベルを B, C とするとき,B \cup C = A かつ B \cap C = \emptyset
  • 根のラベルは根にふさわしい.

ただし,子が 2 個ある頂点についてそれらの順番は区別しない.

制約

  • 1 \le N \le 21

入力

入力は以下の形式で標準入力から与えられる.

N
L
R

L01 からなる長さ 2^N の文字列であり,各 A \subseteq \{0, \ldots, N - 1\} に対し,\left(1 + \sum_{a\in A} 2^a\right) 文字目は A葉にふさわしいとき 1,そうでないとき 0 である.ただし,1 文字目 (先頭) は必ず 0 である.

R01 からなる長さ 2^N の文字列であり,各 A \subseteq \{0, \ldots, N - 1\} に対し,\left(1 + \sum_{a\in A} 2^a\right) 文字目は A根にふさわしいとき 1,そうでないとき 0 である.ただし,1 文字目 (先頭) は必ず 0 である.

出力

条件を満たすラベル付き根付き木の個数を 998244353 で割った余りを出力せよ.


入力例 1

3
01110111
00000101

出力例 1

4

この例では,葉にふさわしい集合は \{0\}, \{1\}, \{0, 1\}, \{0, 2\}, \{1, 2\}, \{0, 1, 2\}6 個,根にふさわしい集合は \{0, 2\}, \{0, 1, 2\}2 個である.条件を満たすラベル付き根付き木は以下の 4 個である:

  • 根のラベルが \{0, 2\} である 1 頂点の木
  • 根のラベルが \{0, 1, 2\} である 1 頂点の木
  • 根のラベルが \{0, 1, 2\} であり,その子のラベルが \{0\}, \{1, 2\} である 3 頂点の木
  • 根のラベルが \{0, 1, 2\} であり,その子のラベルが \{1\}, \{0, 2\} である 3 頂点の木

入力例 2

5
00000001000101100001011001101000
00000000000000010000000100010111

出力例 2

0

入力例 3

6
0111001111111111111111101111111111111111111110111111111111111110
0111001111111111111111111111111111110111111111111001000000010001

出力例 3

2020
I - Implement Me

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

くろうさ「任意のブール関数は甘え」

しろうさ「」

くろうさ「というのはひどいから 1 種類だけ許してあげる」

しろうさ「1 種類だけで論理回路みたいなの組むってことですか?」

くろうさ「1 種類だけで論理回路みたいなの組んでください」

しろうさ「これ無理じゃない?」

くろうさ「今年は無理かどうかの判定もがんばってねっ」

問題文

正の整数 M, L が与えられる.M 変数ブール関数 F\colon \{0, 1\}^M \to \{0, 1\} を次のように定める:F(x_0, \ldots, x_{M-1})x_0, \ldots, x_{M-1} のうち 1L 個以上であるとき 0 であり,1L 個未満であるとき 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 の引数に渡してはならない.

簡易的な出力チェッカーがここから利用可能である.

制約

  • 1 \le M \le 8
  • 1 \le L \le M
  • 1 \le N \le 8

部分点

  • N \le 2 を満たすデータセットに正解した場合は,10 点が与えられる.
  • 追加制約のないデータセットに正解した場合は,上記とは別に 90 点が与えられる.

入力

入力は以下の形式で標準入力から与えられる.

M
L
N
G

G01 からなる長さ 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}) の値を表す.

出力

条件を満たすプログラムが存在しない場合は,-1 と出力せよ.

条件を満たすプログラムが存在する場合は,そのうち 1 つを次の形式で出力せよ:1 行目に命令の個数 p を出力し,続く p 行に実行する順に命令を出力する.各命令はそれを表す添え字 j, i_0, \ldots, i_{M-1} をこの順に空白区切りで出力する.

簡易的な出力チェッカーがここから利用可能である.


入力例 1

2
1
3
00000101

出力例 1

3
2020 0 0
1224 2 2
3 2020 1224

この例では,F(x_0, x_1) = (x_0 \operatorname{NOR} x_1)G(y_0, y_1, y_2) = (y_0 \operatorname{AND} y_2) である.