atcoder#ABC251H. [ABC251Ex] Fill Triangle

[ABC251Ex] Fill Triangle

配点 : 600600

問題文

ブロックが三角形状に NN 段並んでいます。上から ii 段目には ii 個のブロックが並んでいます。

66 以下の非負整数からなる列 A=(A1,A2,...,AN)A = (A_1, A_2, ..., A_N) を連長圧縮した列 P=((a1,c1),(a2,c2),...,(aM,cM))P = ((a_1, c_1), (a_2, c_2), ..., (a_M, c_M)) が与えられます。

  • 例えば A=(2,2,2,5,5,1)A = (2, 2, 2, 5, 5, 1) のとき P=((2,3),(5,2),(1,1))P = ((2, 3), (5, 2), (1, 1)) になります。

上から ii 段目で左から jj 番目のブロックに書きこむ数を Bi,jB_{i,j} として、次の条件を満たすようにすべてのブロックに数を書きこみます。

  • すべての 1iN1 \leq i \leq N を満たす整数 ii について BN,i=AiB_{N,i} = A_{i}
  • すべての 1jiN11 \leq j \leq i \leq N-1 を満たす整数の組 i,ji,j について Bi,j=(Bi+1,j+Bi+1,j+1)mod7B_{i,j}= (B_{i+1,j}+B_{i+1,j+1})\bmod 7

上から KK 段目のブロックに書かれた数を列挙してください。

連長圧縮とは?

数列 AA を以下の手続きによって整数の組からなる列に変換することを連長圧縮と呼びます。

  1. AA を異なる要素が隣り合っている部分で分割する。
  2. 分割した各数列 BB に対して、BB を 「BB を構成する数」 と 「BB の長さ」 からなる整数の組に置き換える。
  3. 置き換えた整数の組を元の順番を保ったまま並べて列にする。

制約

  • 1N1091 \leq N \leq 10^9
  • 1Mmin(N,200)1 \leq M \leq \min(N, 200)
  • 1Kmin(N,5×105)1 \leq K \leq \min(N,5 \times 10^5)
  • 0ai60 \leq a_i \leq 6
  • 1ciN1 \leq c_i \leq N
  • i=1Mci=N\sum_{i=1}^M c_i = N
  • 入力される値はすべて整数

入力

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

NN MM KK

a1a_1 c1c_1

a2a_2 c2c_2

\vdots

aMa_M cMc_M

出力

答えを以下の形式で出力せよ。なお、制約下において答えは一意に定まることが保証される。

BK,1B_{K,1} BK,2B_{K,2} \dots BK,KB_{K,K}

6 3 4
2 3
5 2
1 1
1 4 3 2

A=(2,2,2,5,5,1)A = (2,2,2,5,5,1) です。また、ブロックに書かれる数は次のようになります。

3
    5 5
   5 0 5
  1 4 3 2
 4 4 0 3 6
2 2 2 5 5 1
1 1 1
6 1
6
111111111 9 9
0 1
1 10
2 100
3 1000
4 10000
5 100000
6 1000000
0 10000000
1 100000000
1 0 4 2 5 5 5 6 3