华黎卡的排列构造
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

华黎卡有一个长度为 n 的神秘排列 p。记 S_k = \sum_{i = 1}^{k} p_i,如果对于所有的 1 \le i \le nS_i 都能被 p_i 整除,那么排列 p 被称为 好排列

要判断一个排列是不是 好排列 实在是太容易了,华黎卡可不会喜欢做这么容易的事,所以华黎卡专门为你出了另外一个问题:

给定一个正整数 n,你需要构造一个长度为 n 的排列 p,使得这个排列是 好排列。你需要判断这样的排列是否存在。另外地,如果这样的排列存在,请输出任意一个满足条件的排列。

【名词解释】一个长度为 n 的排列是一个包含 n 个整数的序列,其中 1 到 n 的每个整数恰好出现一次。例如,[2,3,1,5,4] 是一个排列,而 [1,2,2] 不是(2 出现了两次),[1,3,4] 也不是(n=3 但出现了 4)。

输入描述:

第一行包含一个整数 t (1 \le t \le 10^4) ,表示测试用例的组数。

接下来 t 行,每行包含一个整数 n (1 \le n \le 5 \times 10^5),表示你需要构造的排列的长度。

数据保证所有测试用例中 n 的总和不超过 10^6

输出描述:

对于每组测试数据,输出一个字符串,表示能否构造出这样的排列。如果能,输出 \mathtt{YES},否则输出 \mathtt{NO}

如果能构造出这样的排列,请在第二行输出任意一个满足条件的排列。

请注意,答案的输出区分大小写。
示例1

输入

复制
3
1
3
4

输出

复制
YES
1
YES
2 1 3
YES
3 1 4 2