题号:NC233101
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
给定一个

个数的序列

常数

。
定义一个仅含

的元素的集合的

价值为:
令其中的元素依次为

,则

的价值为
)
,其中一些数的

为其中最小的没有出现过的数。
对于每个

,求出有多少种将

分为两个集合

的方式,使得两个集合的价值和为

,两种方式不同当且仅当

不同或

不同。
输入描述:
由于

可能很大,我们采取如下方式读入。
接下来一行

个数,其中第

个数
)
表示

的在序列出现次数,可以发现在序列中出现的具体位置并不影响答案。
保证

。
输出描述:
一行
个整数,第
个数表示
时的答案,对
取模。
示例2
输出
复制
0 8192 6144 16896 16128 20184 16344 19824 9120 6336 11904 0 0 0 0 0 0 0 0 0 0