Description
定义一个序列 {a}i=1n 的整齐度为:将 {a}i=1n 随意打乱顺序,得到序列 {b}i=1n,统计满足 ai=bi 的 i 的个数,在所有的打乱方式中,i 的个数的最小值。
定义一个序列的子序列(即子列),为从原数列中删去任意数(可以不删),其它数保留原来的相对顺序,得到的序列。例如,{1,2,4} 为 {1,2,3,4} 的子序列,但 {1,3,2} 不是。
在本题中,两个子序列不同,当且仅当从原序列删去的数的个数不同,或者删去的数的下标的集合不同。例如,1,2,2 中存在两个形如 1,2 的子序列。
给定序列 {a}i=1n,对于每一个非负整数 k(0≤k≤n),求 {a} 的整齐度为 k 的非空子序列个数。
答案可能很大,你只需要求出其对质数 106+3 取模的结果即可。
第一行一个正整数 n(1≤n≤106).
第二行 n 个正整数,第 i 个正整数为 ai(1≤ai≤n).
Output
输出 n+1 行,每行一个数。第 k 行为整齐度为 k−1 的子序列个数,对 106+3 取模。
Samples
3
1 2 2
2
4
1
0
Limitation
2s, 256MiB.
对于 50% 的数据,1≤n≤103.
对于所有数据,1≤n≤106.
Hint
p 为质数时:
- (a+b)modp=(amodp+bmodp)modp.
- (−b)modp=(p−b)modp.
- (ab)modp=(amodp⋅bmodp)modp.
- bamodp=(a⋅bp−2)modp.(费马小定理)
请注意,直接使用 pow
,fractorial
等函数会导致数字过大而丢失数据精度,请手动用循环的方式实现。或使用快速幂的形式实现。快速幂教程:Click me.