题目描述
题目译自 Romanian Master of Informatics 2021 Day1 T2 「Present」
莱卡决定为她的好朋友高地女巫阿兹莎准备一份礼物。出于未知的原因,这份礼物将是一组有限的正整数。如果只有这些,选择礼物将是一件简单的事情,但几个因素使这件事变得复杂。
首先,莱卡的竞争对手弗拉托特拥有神秘的魔法力量:给定两个整数 x 和 y,她可以创建 x 和 y 的最大公约数(即 gcd(x,y))。如果莱卡送了一份礼物,弗拉托特可以立即添加到礼物中(即如果她送了一组 A,其中 x,y∈A,但 gcd(x,y)∈/A),那么弗拉托特就会立即嘲笑她的对手。因此,莱卡的礼物不能通过弗拉托特的魔法力量进行改进:如果她送了 A,那么对于所有的 x,y∈A,必须满足 gcd(x,y)∈A。
其次,莱卡希望礼物具有某种特殊意义。自从她遇到阿兹莎已经过去了 K 天,她希望礼物能体现这一事实。因此,她将满足上述条件的所有集合按照莱卡顺序(如下所述)排列,得到一个无限的有限集合序列 S0,S1,… 她想要选择并送出集合 SK。你能帮她做到吗?
莱卡顺序:取两个集合 A 和 B。那么,当且仅当 maxA<maxB 或 maxA=maxB 且 A\{maxA} 在莱卡顺序中先于 B\{maxB} 时,A 在莱卡顺序中先于 B。特别的,令 max∅=−∞。请注意,对于有限的正整数集合,这总是明确定义的。
输入格式
输入包含多组数据。第一行包含一个整数 T。接下来的 T 行每行描述了一组测试数据,每行包含一个整数 K ,我们想要知道 SK。
输出格式
对于这 T 个 K 的值中的每一个,输出集合 SK。要输出一个集合,输出一行,首先是它的元素个数,然后是它的元素,按升序排列。
样例 1
输入
5
0
1
2
3
4
输出
0
1 1
1 2
2 1 2
1 3
请注意,S0=∅, S1={1}, S2={2}, S3={1,2}, S4={3}, S5={1,3}, S6={1,2,3}, S100={1,2,3,7,8}, S1000={1,2,3,5,10,11,12}。这些正是样例中输出的集合(以及它们的大小)。请注意,S6={2,3},这是因为 2,3∈{2,3},但 gcd(2,3)=1∈/{2,3}。
样例 2
输入
4
5
6
100
1000
输出
2 1 3
3 1 2 3
5 1 2 3 7 8
7 1 2 3 5 10 11 12
数据范围与提示
对于所有输入数据,满足:
- 1≤T≤5
详细子任务附加限制及分值如下表所示。
| 子任务 |
分值 |
附加限制 |
| 1 |
8 |
0≤K≤100 |
| 2 |
21 |
0≤K≤106 |
| 3 |
41 |
0≤K≤5⋅108 |
| 4 |
14 |
0≤K≤109 |
| 5 |
16 |
0≤K≤1.5⋅109 |