

Time Limit: 2 sec / Memory Limit: 1024 MiB
配点 : 500 点
問題文
高橋くん一行は、AtCoder Land 内のアイス屋さんにやってきました。
アイス屋さんには N 種類のフレーバーのアイスがあり、アイスはそれぞれ十分な量の在庫があります。
このアイス屋さんでは、5 段重ねのアイスを購入することができます。 使う 5 つのフレーバーは(重複も含めて)自由に選ぶことができますが、あるアイスの上に直接同じ味のアイスを重ねることはできません。 つまり、このアイス屋さんで購入できる 5 段重ねのアイスは N\times(N-1) ^ 4 通りあります。
高橋くんはこのアイス屋さんのクーポンを持っており、i=1,2,\ldots,N すべてに対して i 番目のフレーバーのアイスを注文した数が C _ i 個以下なら、クーポンを使って購入することができます。 売られているアイスの定価は非常に高いため、高橋くんはクーポンを使って購入できる個数を超えてアイスを購入することはできません。
高橋くんは、なるべく多くの友達に 5 段重ねのアイスを買ってあげたいと思っています。 5 段重ねのアイスを最大でいくつ買うことができるか求め、それを実現するアイスの注文をひとつ構成してください。
厳密には、次のようになります。
次の条件をすべて満たす K\times5 項の列 (A _ {i,j}) _ {1\leq i\leq K,1\leq j\leq 5} が存在するような非負整数 K の最大値を求め、その K に対する具体的な (A _ {i,j}) をひとつ構成してください。
- 1\leq A _ {i,j}\leq N\ (1\leq i\leq K,1\leq j\leq 5)
- A _ {i,j}\neq A _ {i,j+1}\ (1\leq i\leq K,1\leq j\leq 4)
- x=1,2,\dotsc,N に対して、A _ {i,j}=x となる組 (i,j) の個数は C _ x 個以下
ただし、条件を満たす (A _ {i,j}) が複数存在する場合、どれを出力しても構いません。
制約
- 1\leq N\leq2\times10 ^ 5
- 0\leq C _ i\leq2\times10 ^ 5
- \displaystyle\sum _ {i=1} ^ NC _ i\leq2\times10 ^ 5
- 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
N C _ 1 C _ 2 \ldots C _ N
出力
5 段重ねのアイスを K 個買うことができる最大の K を求め、それぞれのアイスで買うフレーバーを以下の形式で K+1 行にわたって出力せよ。
K A _ {1,1} A _ {1,2} A _ {1,3} A _ {1,4} A _ {1,5} A _ {2,1} A _ {2,2} A _ {2,3} A _ {2,4} A _ {2,5} \vdots A _ {K,1} A _ {K,2} A _ {K,3} A _ {K,4} A _ {K,5}
ここで、(A _ {i,j}) は問題文中の条件を満たす必要がある。
条件を満たすような (A _ {i,j}) が複数ある場合、どれを出力してもよい。
入力例 1
5 3 1 4 2 5
出力例 1
3 1 2 1 3 1 3 4 5 3 5 5 3 5 4 5
次のようにすることで、5 段重ねのアイスを 3 つ買うことができます。
例えば、次のように出力しても正解になります。
3 1 3 4 5 1 3 4 5 1 3 5 3 5 2 5
逆に、次のような出力は正解と判定されません。
3 1 1 1 2 3 3 3 3 4 4 5 5 5 5 5
3 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
2 1 2 3 4 5 1 3 4 5 1
それぞれ、あるアイスの上に直接同じフレーバーを乗せているため、2 番と 4 番のフレーバーを購入できる個数を超えて注文しているため、K が最大ではないためです。
入力例 2
3 1 2 1000
出力例 2
1 3 1 3 2 3
高橋くんはアイス 1003 個ぶんのクーポンを持っていますが、5 段重ねのアイスは 1 つしか買うことができません。
入力例 3
1 3
出力例 3
0
5 段重ねのアイスを 1 つも買うことができない場合もあります。
入力例 4
10 2 1 8 6 1 2 1 6 9 1
出力例 4
7 1 2 1 3 4 3 4 3 4 3 3 4 3 4 3 3 4 5 6 7 6 8 9 8 9 9 8 9 8 9 9 8 9 8 9