D - Swap Counter Editorial /

Time Limit: 2 sec / Memory Limit: 1024 MiB

配点 : 100

問題文

(1,2,\dots,M) の順列 Q=(Q_1,Q_2,\dots,Q_M) に対し、長さ M-1 の数列 f(Q) を以下のように定めます。

  • 長さ M-1 の数列 XX=(0,0,\dots,0) で初期化する
  • 以下の操作を M-1 回行う
    • i=1,2,\dots,M-1 の順に以下を行う
      • Q_i > Q_{i+1} ならば Q_iQ_{i+1} を入れ替え、X_i1 を加える
      • Q_i < Q_{i+1} ならば何もしない
  • 最終的な Xf(Q) とする

長さ N-1 の数列 B=(B_1,B_2,\dots,B_{N-1}) が与えられます。(1,2,\dots,N) の順列 P であって f(P)=B を満たすものが存在するか判定し、存在するならばそのようなもののうち辞書順で最小のものを求めてください。

T 個のテストケースが与えられるので、それぞれについて答えを求めてください。

制約

  • 1 \leq T \leq 1.5 \times 10^5
  • 2 \leq N \leq 3 \times 10^5
  • 0 \leq B_i \leq N-1
  • 入力は全て整数
  • 1 つの入力ファイルに含まれる N の総和は 3 \times 10^5 以下

入力

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

T
\text{case}_1
\text{case}_2
\vdots
\text{case}_T

それぞれのテストケースは次の形式で与えられる。

N
B_1 B_2 \dots B_{N-1}

出力

T 行出力せよ。i=1,2,\dots,T に対して i 行目には i 番目のテストケースについて、条件を満たす順列が存在しない場合は -1 を、そうでない場合は条件を満たす辞書順最小の P を空白区切りで出力せよ。


入力例 1

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

出力例 1

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

1 つ目のテストケースについて P=(3,2,4,1) のとき f(P) は次のように計算されます。

  • はじめ X=(0,0,0) である
  • 1 回目の操作は次のように行われる
    • P_1 > P_2 なので X_11 を加算し、P_1P_2 を入れ替える
      • X=(1,0,0),P=(2,3,4,1) となる
    • P_2 < P_3 なので何もしない
    • P_3 > P_4 なので X_31 を加算し、P_3P_4 を入れ替える
      • X=(1,0,1),P=(2,3,1,4) となる
  • 2 回目の操作は次のように行われる
    • P_1 < P_2 なので何もしない
    • P_2 > P_3 なので X_21 を加算し、P_2P_3 を入れ替える
      • X=(1,1,1),P=(2,1,3,4) となる
    • P_3 < P_4 なので何もしない
  • 3 回目の操作は次のように行われる
    • P_1 > P_2 なので X_11 を加算し、P_1P_2 を入れ替える
      • X=(2,1,1),P=(1,2,3,4) となる
    • P_2 < P_3 なので何もしない
    • P_3 < P_4 なので何もしない

よって f(P) = (2,1,1) となります。特にこの Pf(P)=B を満たす P のうち辞書順最小のものです。

2 つ目のテストケースについて f(P)=(2,0,2,4) となる順列 P は存在しません。