#USACO2495. 农夫约翰最喜欢的排列

农夫约翰最喜欢的排列

题目描述

Farmer John 有一个长为 NN 的排列 pp,包含从11NN 的每个正整数恰好一次。然而,farmer Nhoj闯入了FJ 的牛棚并拆散了 pp

为了不至于太过残忍,FNFN 写了一些能够帮助FJFJ重建pp的提示。当pp中剩余多于一个元素时,FNFN 会执行以下操作:

pp的剩余元素为 p1,p2,..,pnp'_1,p'_2,,..,p'_n

如果p1>pnp'_1>p'_n,,他写下 p2p'_2 并从排列中删除 p1p'_1.

否则,他写下 pn1p'_{n-1}并从排列中删除 pnp'_n

最终,Farmer Nhoj将按顺序写下 N1N -1个整数 h1,h2,.,hN1h1,h2,…….,h_{N-1}。给定 hh,FarmerJohn 希望得到你的帮助重建与Farmer Nhoj的提示相一致的最小字典序pp,或者判断 Farmer Nho 一定犯了错误。

我们知道,给定两个排列pppp',如果在第一个两者不同的位置ii处有 pi<pip_i < p'_i,,则pp的字典序小于 pp'

提示

每个测试点包含 TT 个独立的测试用例。

每个测试用例的描述如下:

第一行包含 NN

第二行包含 N1N -1个整数 h1,h2,...,hN1h_1,h_2,...,h_{N-1}

输出

输出 TT 行,每个测试用例一行

如果存在与hh 相一致的 1...N1...N 的排列 pp,输出字典顺序最小的 pp

如果不存在这样的pp,输出 -1

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

样例解释

对于第四个测试用例,如果p=[3,1,2,4]p=[3,1,2,4]则 FN 将写下 h=[2,1,1]h =[2,1,1]

p=[3,1,2,4]p'=[3,1,2,4]

p1<pn > h1=2p'_1<p'_n \ -> \ h_1=2

p=[3,1,2]p'=[3,1,2]

p1>pn > h2=1p'_1>p'_n \ -> \ h_2=1

p=[1,2]p'=[1,2] p1<pn > h3=1p'_1<p'_n \ -> \ h_3=1

注意排列 p=[4,2,1,3]p =[4,2,1,3]也会产生同样的 hh,但[3,1,2,4][3,1,2,4]字典序更小。

对于第二个测试用例,不存在与ん相一致的 pp;p=[1,2]p= [1,2]p=[2,1]p=[2,1]均会产生h=[1]h = [1],并非h=[2]h =[2]

提示

测试点 2:N<8N < 8

测试点3-6:N<100N < 100。

测试点7-11:

2N105 2 \leq N \leq 10^5

1T101 \leq T \leq 10

1hiN1 \leq h_i \leq N