You are given a sequence b1,b2,…,bnb1,b2,…,bn . Find the lexicographically minimal permutation a1,a2,…,a2na1,a2,…,a2n such that bi=min(a2i−1,a2i)bi=min(a2i−1,a2i) , or determine that it is impossible.

Input

Each test contains one or more test cases. The first line contains the number of test cases tt (1≤t≤1001≤t≤100 ).

The first line of each test case consists of one integer nn  — the number of elements in the sequence bb (1≤n≤1001≤n≤100 ).

The second line of each test case consists of nn different integers b1,…,bnb1,…,bn  — elements of the sequence bb (1≤bi≤2n1≤bi≤2n ).

It is guaranteed that the sum of nn by all test cases doesn't exceed 100100 .

Output

For each test case, if there is no appropriate permutation, print one number −1−1 .

Otherwise, print 2n2n integers a1,…,a2na1,…,a2n  — required lexicographically minimal permutation of numbers from 11 to 2n2n .

Example
Input

 
5
1
1
2
4 1
3
4 1 3
4
2 3 4 5
5
1 5 7 2 8
Output

 
1 2
-1
4 5 1 2 3 6
-1
1 3 5 6 7 9 2 4 8 10
题意很简单。因为有要求:1.bi=min(a2i−1,a2i),2.字典序尽可能
#include <bits/stdc++.h>
using namespace std;
int b[];
int out[];
bool vis[];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int i,j;
int flag=;
memset(vis,,sizeof(vis));
for(i=;i<=n;i++)
{
scanf("%d",&b[i]);
vis[b[i]]=;
out[*i-]=b[i];
} for(i=;i<=n;i++)
{
int find=; for(j=;j<=*n;j++)
{
if(vis[j])continue;
if(j>out[*i-])
{
out[*i]=j;
find=;
vis[j]=;
break;
}
} if(!find)
{
flag=;
break;
}
} if(!flag)
{
cout<<-<<endl;
continue;
}
for(i=;i<=*n;i++)
{
cout<<out[i]<<' ';
}
cout<<endl;
}
return ;
}
小。所以肯定要把bi放到2i-1的位置(观察样例也不难看出)。然后就是在剩下的数里从小到大地找,找到第一个比bi大的数填到a2i的位置,没有这么一个数的话返回-1.至于正确性的话可以这么想,假设b数组里靠前的是比较小的数,那么从剩下的数里从小到大地选,能保证剩下的里较大的数留给后面更大的bi;假设b数组里靠前的是比较大的数,挑过以后肯定还能保证后面较小的bi有数和它搭配,所以贪心是正确的。

Codeforces 1315C Restoring Permutation的更多相关文章

  1. [Codeforces 1208D]Restore Permutation (树状数组)

    [Codeforces 1208D]Restore Permutation (树状数组) 题面 有一个长度为n的排列a.对于每个元素i,\(s_i\)表示\(\sum_{j=1,a_j<a_i} ...

  2. CodeForces 483C Diverse Permutation

    Diverse Permutation Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64 ...

  3. codeforces 483C.Diverse Permutation 解题报告

    题目链接:http://codeforces.com/problemset/problem/483/C 题目意思:给出 n 和 k,要求输出一个含有 n 个数的排列 p1, p2, ...,pn,使得 ...

  4. Codeforces 898F - Restoring the Expression(字符串hash)

    898F - Restoring the Expression 思路:字符串hash,base是10,事实证明对2e64取模会T(也许ull很费时),对1e9+7取模. 代码: #include< ...

  5. Codeforces 285C - Building Permutation

    285C - Building Permutation 思路:贪心.因为每个数都不同且不超过n,而且长度也为n,所有排列只能为1 2 3 ......n.所以排好序后与对应元素的差值的绝对值加起来就是 ...

  6. codeforces C. Diverse Permutation

    C. Diverse Permutation time limit per test 1 second memory limit per test 256 megabytes input standa ...

  7. CodeForces - 233A Perfect Permutation

    A. Perfect Permutation time limit per test: 2 seconds memory limit per test: 256 megabytes input: st ...

  8. Codeforces 863F - Almost Permutation

    863F - Almost Permutation 题意 给出每个位置可以放的数字的范围,定义 \(cost = \sum_{i=1}^{n}(cnt(i))^2\) ,其中 \(cnt(i)\) 为 ...

  9. Codeforces 932.C Permutation Cycle

    C. Permutation Cycle time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

随机推荐

  1. win下删除EFI分区

    管理员身份,在cmd终端下,用"diskpart"命令. diskpart ##命令进入Microsoft DiskPart 模式 list disk ##展示磁盘分区列表 sel ...

  2. IDEA的Debug模式灰色无法运行

    1. 检查本地环境是否配置得当,进入项目右键看项目是否可以正常debug运行 2.  如果不可运行,那么选择File--Project Structrue 3. 修改Src文件,如图然后就可以正常使用 ...

  3. AVR单片机丢固件原因分析和解决方案

    一.硬件方面 除了下面列举的方面,还需要评估下其他措施. 1.电源因素,禁干扰. 只要用廉价劣质的开关电源,不管哪个单片机,都存在EEPROM丢数据和单片机程序丢失的情况. 1.转接板走线,直接接到了 ...

  4. Babel 7 主要改变

    1.不支持Node:0.10,0.12,4,5版本 2.更换命名-@babel/xxx 3.移除以年份命名的presets,统一更换成@babel/preset-env 4.移除 ’Stage‘ pr ...

  5. hadoop 配置信息记录

    ssh-keygen  -t   rsa   -P  '' 192.168.157.148 hadoop01192.168.157.149 hadoop02 mkdir  /root/hadoopmk ...

  6. PP: A multi-horizon quantile recurrent forecaster

    2017 NIPS, time series workshop traditional methods: ARIMA. Seq2Seq quantile forecast; RELATED WORK ...

  7. git中设置代理

    说明:在某种原因下,整个网络都是使用代理的情况下,需要使用git clone,这时就需要设置代理了. 在没有设置代理的时候,直接克隆报错  Failed to connect to gitee.com ...

  8. Java基本语法--程序流程控制

    流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块.流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:顺序结构.分支结构.循环结构.本篇博客主要是对 ...

  9. python dataframe筛选列表的值转为list【常用】

    网上方法参差不齐,无注释解释不好秒懂,没有自己想要的,故自己试验一番~ 1. 筛选列表中,当b列中为’1’时,所有c的值,然后转为list 2 .筛选列表中,当a列中为'one',b列为'1'时,所有 ...

  10. Jmeter-Badboy检查点和参数化

    Badboy进行检查点操作 1.复制搜索的内容,点击Tools,选择添加断言Add Assertion for Selection 2.这个时候Step1步骤下就会多一个检查点 3.点击工具栏上的Pl ...