#P3784. [SDOI2017] 遗忘的集合
[SDOI2017] 遗忘的集合
题目描述
小 Q 在他的个人主页上放出了一个悬赏:征集只含正整数的非空集合 ,其中的每个元素都不超过 ,并且满足一些附加条件。
众所周知,我们可以很轻松地对于任意不超过 的正整数 ,计算出把 表示成 中元素之和的方案数 ,在这里我们约定,在任意方案中每个数字可以出现多次,但是不考虑数字出现的顺序。
例如,当 时,我们可以计算出 。
再例如,当 时,我们可以计算出 。
麻烦地是现在小 Q 忘记了 里有哪些元素,幸运地是他用存储设备记录下了所有 的值,小 Q 希望你能利用这些信息帮他恢复出 原来的样子。
具体来说,他希望你找到这样一个正整数的非空集合 ,其中的每个元素都不超过 ,并且对于任意的 ,满足把 表示成 中元素之和的方案数在模 意义下等于 ,其中 是记录在存储设备中的一个质数。他向你保证:一定存在这样的集合。
然而,小 Q 觉得他存储的信息并不足以恢复出唯一的 ,也就是说,可能会存在多个这样的集合 ,所以小 Q 希望你能给出所有解中字典序最小的解。
对于满足条件的两个不同的集合 和 ,我们认为 的字典序比 的字典序小,当且仅当存在非负整数 ,使得 的前 小元素与 的前 小元素完全相等,并且,要么 的元素个数为 ,且 的元素个数至少为 ,要么 和 都有至少 个元素,且 的第 小元素比 的第 小元素小。
输入格式
第一行包含两个整数 和 ,满足 是质数。
第二行包含 个整数 ,含义见题目描述。
保证每一行中相邻的整数由恰好一个空格隔开,并且末尾没有多余的空格。
输出格式
你需要输出两行信息来描述字典序最小的解,其中第一行包含一个整数 ,表示 的元素个数,第二行包含 个正整数 ,表示将 的所有元素按升序排序后得到的序列。
你需要保证输出的每一行中相邻的整数由恰好一个空格隔开,并且每一行的末尾没有多余的空格。
5 1000003
1 2 3 5 7
5
1 2 3 4 5
9 1000003
1 2 2 3 4 5 6 7 8
3
1 2 5
提示
对于 的数据,有 $1 \leq n < 2^{18} , 10^6 \leq p < 2^{30} , 0 \leq f(i) < p\quad (i=1,2, \cdots , n)$。