问题6758--按位排序

6758: 按位排序

[命题人 : ]
时间限制 : 2.000 sec  内存限制 : 256 MiB

题目描述

【题目描述】 

鲍勃发明了一种神奇的排序算法:按位排序。用该算法对一个序列进行排序之后,拆出这个序列二进制表示的每一位来看,都是有序的(升序或者降序都可以)。

聪明的你很快意识到,并不是所有的序列通过调换顺序都能达到二进制每一位都是有序的效果。刚刚学习了编程知识的你决定将鲍勃的算法用代码实现出来,并向他证明有的序列是可以通过这种排序算

法产生结果,但是有些序列是不能产生正确结果的。

鲍勃正准备公开发表他的错误算法,请你赶快阻止他吧!

【输入格式】  

第一行输入一个正整数 T (1 ≤ T ≤ 10),表示有 T 组数据。

对于每组数据,第一行一个整数 n(1 ≤ n ≤ 2 × 10^5 ), 代表原始序列的长度

其后一行 n 个整数 a1, a2, ..., an(0 ≤ ai < 2^30)

【输出格式】 

对于每组数据,输出一行:

如果无解,输出”No Solution”(不包括引号)

如果有解,输出一行 n 个整数,代表排序后的结果。如果有多种解,请你输出字典序最小的那一种。

两个序列的字典序比较方式是从左到右找到第一个不同的元素,比较该元素的大小。

【样例】

bitsort.in

bitsort.out

2

5

2 3 4 6 6

3

3 5 6

3 2 6 6 4

No Solution

【数据约束】 

测试点编号

n ≤

特殊性质

1

10


2~4

1000

ai <= 2^10 − 1

5~7

2 × 10^5

保证有解

8~10

2 × 10^5


 

来源/分类