Responsive image

问题 2606 --找回数组

2606: 找回数组

时间限制: 1 Sec  内存限制: 128 MB
提交: 0  解决: 4
[提交][状态][讨论版][命题人:]

题目描述

有一个长度为 k 的整数数组 x0,x1,…,xk−1

不幸的是,这个数组已经丢失了,我们甚至不知道 k 的具体值。

幸运的是,我们找到了另一个利用数组 x 生成的长度为 n+1 的数组 a0,a1,…,an

数组 a 的正式描述如下:

a0=0。
对于 1≤i≤n,ai=x(i−1)mod k+ai−1
例如,当 x=[1,2,3] 并且 n=5 时,生成数组 a 的过程如下:

a0=0
a1=x0mod3+a0=x0+0=1
a2=x1mod3+a1=x1+1=3
a3=x2mod3+a2=x2+3=6
a4=x3mod3+a3=x0+6=7
a5=x4mod3+a4=x1+7=9
所以,当 x=[1,2,3] 并且 n=5 时,可以生成数组 a=[0,1,3,6,7,9]。

现在,我们希望你通过数组 a 找回数组 x。

更具体地说,已知 1≤k≤n,请你找到所有可能的 k 值,即数组 x 的所有可能长度。

输入描述

第一行包含整数 n。

第二行包含 n 个整数 a1,a2,…,an

注意,由于 a0 一定等于 0,所以在输入中并未给出。

输出描述

第一行输出一个整数 l,表示数组 x 的所有可能长度的数量。

第二行按升序输出 l 个整数,表示数组 x 的所有可能长度。

样例输入

5
1 2 3 4 5

样例输出

5
1 2 3 4 5

提示

前四个测试点满足 1≤n≤5,

所以测试点满足 1≤n≤1000,1≤ai≤106

来源

[提交][状态]
ACM算法攻关部