問題文
高橋君は、 3 つの整数 B1,B2,B3 が好きです。
そこで、高橋君は、 N×N のマス目に数を書き込み、縦または横に連続した数の区間で、和が好きな数になるものを、たくさん作ろうと思いました。
例えば、以下のようにマス目に数を書き込み、好きな整数が 13 だった時、赤で塗ったような区間が、条件を満たす区間となります。

和が B1,B2,B3 となる縦または横の区間の数を A1,A2,A3 とすると、A1×B1+A2×B2+A3×B3 が、得られる点数となります。
ただし、高橋君は、盤面に自由に数を書き込むことが出来ません。各マスには、書き込める数の最小値と最大値が決められています。
上から i 番目、左から j 番目のマスには、li,j から ri,j の間の数しか書き込むことが出来ません。
高橋君が獲得できる点数が、出来るだけ多くなるような、数の書き込み方を求めてください。
この問題は、最適な解を発見することを想定されていない、所謂マラソン系問題です。条件を満たす解であれば、点数を獲得することが出来ます。
制約
- N=30
- 10 ≦ B1 ≦ 19
- 20 ≦ B2 ≦ 29
- 30 ≦ B3 ≦ 39
- 1 ≦ li,j ≦ ri,j ≦ 9
入力
入力は以下の形式で与えられる。
N B1 B2 B3
l1,1 l1,2 ... l1,N
l2,1 l2,2 ... l2,N
:
lN,1 lN,2 ... lN,N
r1,1 r1,2 ... r1,N
r2,1 r2,2 ... r2,N
:
rN,1 rN,2 ... rN,N
出力
i 行目、 j 列目のマスに書き込む数を Ai,j として、以下のフォーマットで出力せよ。
A1,1 A1,2 ... A1,N
A2,1 A2,2 ... A2,N
:
AN,1 AN,2 ... AN,N
出力された全ての Ai,j について、li,j≦Ai,j≦ri,j が満たされていれば、正解となり、問題文に書かれた点数が得られる。
不正解となる出力が行われた場合は、ほぼ全てのテストケースが 0 点として扱われる。
入力生成方法
- B は、制約の範囲内で一様なランダムで生成される。
- li,j,ri,j は、1 から 9 の間で一様なランダムで独立に生成される。この際、li,j が ri,j より大きかった場合、それらの値をswapする。
入出力例その他
入出力(Example01~03)、入出力検証プログラム(C++)のダウンロードはこちらから。