单调栈
题号:NC201935
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

对于一个 的排列 ,我们这样定义它的单调栈
对于 ,若 中比 小的数里最大的是 ,则 ,若不存在这样的数,则
现在你得到了 中某些位置的值,求一个字典序最小的 使得它满足这些值。
数据保证一定有解:数据的生成方式为先随机生成一个 ,然后求出它的 ,再随机去掉一些位置的值。
对于两个数组 ,前者的字典序比后者小,当且仅当存在某个 使得

输入描述:

第一行一个正整数  表示数据组数
对于每组数据,第一行一个正整数 ,第二行 个整数表示 ,若 则表示这个 不知道是什么,你不需要去关心它。

输出描述:

对于每组数据,输出一行  个整数,表示字典序最小的 ,注意不要有行末空格
示例1

输入

复制
3
4
-1 2 -1 2
6
1 -1 2 -1 3 -1
4
-1 -1 1 -1

输出

复制
1 3 4 2
1 3 2 5 4 6
2 3 1 4