#2019. 排列

排列

排列

题目描述

染染有一个长度为 nn 的排列 1,2,,n1,2,\cdots,n。他将这个排列重新排列,并给其中若干个数加上负号,得到了序列 a1,a2,,ana_1,a_2,\cdots,a_n。换句话说,序列 a1,a2,,ana_1,a_2,\cdots,a_n 满足:

  • 任意 aia_i 的绝对值都是大于等于 11 且小于等于 nn 的整数;
  • 对于任意 iji \ne j,都有 aiaj|a_i| \ne |a_j|

其中,x|x| 表示 xx 的绝对值:当 x0x \ge 0 时,x=x|x|=x;当 x<0x<0 时,x=x|x|=-x

现在,染染根据这个序列构造出另一个序列 b1,b2,,bnb_1,b_2,\cdots,b_n,其中 bib_i 表示满足 ai+aj>0a_i+a_j>0 的下标 jj 的个数。
不幸的是,染染忘记了原来的序列 a1,a2,,ana_1,a_2,\cdots,a_n,只模糊记得序列 b1,b2,,bnb_1,b_2,\cdots,b_n。请你判断给定的序列 b1,b2,,bnb_1,b_2,\cdots,b_n 是否合法。也就是说,是否存在一个满足条件的序列 a1,a2,,ana_1,a_2,\cdots,a_n 与之对应;如果存在,请构造出任意一个这样的序列。


数据范围

  • 1T1061 \le T \le 10^6
  • 1n1061 \le n \le 10^6
  • 0bin0 \le b_i \le n
  • 单个测试点中所有数据的 nn 之和不超过 10610^6

输入格式

从标准输入按以下格式读取数据:

TT

nn

b1b_1 b2b_2 \dots bnb_n

其中:

  • 第一行输入一个整数 TT,表示数据组数。
  • 对于每组数据,第一行输入一个整数 nn,表示序列长度。
  • 第二行输入 nn 个整数 b1,b2,,bnb_1,b_2,\cdots,b_n

输出格式

对于每组数据:

  • 第一行输出字符串 YESNO,表示给定序列是否合法;
  • 如果第一行输出 YES,则第二行输出一个对应的序列 a1,a2,,ana_1,a_2,\cdots,a_n
  • 如果存在多种合法构造,输出任意一种即可。

样例

3
3
3 3 3
3
1 1 1
5
3 2 2 5 5
YES
1 2 3
NO
YES
1 -3 -2 4 5