CF1858C.Yet Another Permutation Problem

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Yet Another Permutation Problem

题目描述

又一个排列问题

Alex 收到了一个名为 "GCD 排列" 的游戏作为生日礼物。这个游戏的每一轮进行如下操作:

  • 首先,Alex 选择一个整数序列 ^{\dagger} a1,a2,,an a_1, a_2, \ldots, a_n ,其中整数范围从 1 1 n n
  • 然后,对于每个 i i 1 1 n n ,计算整数 di=gcd(ai,a(imodn)+1) d_i = \gcd(a_i, a_{(i \bmod n) + 1})
  • 本轮的得分是 d1,d2,,dn d_1, d_2, \ldots, d_n 中不同数字的数量。

Alex 已经玩了几轮游戏,所以他决定找一个整数序列 a1,a2,,an a_1, a_2, \ldots, a_n ,使得它的得分尽可能地大。

回顾一下,gcd(x,y) \gcd(x, y) 表示 x x y y 最大公约数(GCD),而 xmody x \bmod y 表示将 x x 除以 y y 的余数。

^{\dagger} 长度为 n n 的排列是一个由 n n 个不同整数组成的数组,整数范围从 1 1 n n 且顺序任意。例如,[2,3,1,5,4] [2,3,1,5,4] 是一个排列,但 [1,2,2] [1,2,2] 不是排列(数组中有重复的 2 2 ),[1,3,4] [1,3,4] 也不是排列(虽然 n=3 n=3 ,但数组中有 4 4 )。

输入格式

第一行包含一个整数 t t 1t104 1 \le t \le 10^4 ) — 测试用例的数量。

每个测试用例由一行组成,包含一个整数 n n 2n105 2 \le n \le 10^5 ) — 数列中的整数数量。

保证所有测试用例中的 n n 总和不超过 105 10^5

输出格式

对于每个测试用例,输出一行包含 n n 个不同整数 a1,a2,,an a_{1},a_{2},\ldots,a_{n} 1ain 1 \le a_i \le n ) — 得分最大的排列。

如果有多个得分相同的排列,可以输出其中任何一个。

样例 #1

样例输入 #1

4
5
2
7
10

样例输出 #1

1 2 4 3 5 
1 2 
1 2 3 6 4 5 7 
1 2 3 4 8 5 10 6 9 7

说明/提示

在第一个测试用例中,Alex 想要找一个由整数 1 1 5 5 组成的排列。对于排列 a=[1,2,4,3,5] a=[1,2,4,3,5] ,数组 d d 等于 [1,2,1,1,1] [1,2,1,1,1] 。它包含 2 2 个不同的整数。可以证明,长度为 5 5 的排列中没有比这个得分更高的。

在第二个测试用例中,Alex 想要找一个由整数 1 1 2 2 组成的排列。只有两种这样的排列:a=[1,2] a=[1,2] a=[2,1] a=[2,1] 。在这两种情况下,数组 d d 都等于 [1,1] [1,1] ,所以这两种排列都是正确的。

在第三个测试用例中,Alex 想要找一个由整数 1 1 7 7 组成的排列。对于排列 a=[1,2,3,6,4,5,7] a=[1,2,3,6,4,5,7] ,数组 d d 等于 [1,1,3,2,1,1,1] [1,1,3,2,1,1,1] 。它包含 3 3 个不同的整数,所以得分等于 3 3 。可以证明,由整数 1 1 7 7 组成的排列中没有得分更高的。

样例

4
5
2
7
10
1 2 4 3 5 
1 2 
1 2 3 6 4 5 7 
1 2 3 4 8 5 10 6 9 7

在线编程 IDE

建议全屏模式获得最佳体验