#171. 彩石

彩石

附加文件

问题描述

N 个石子自左向右排成一排,第 i 个石子的颜色为 ai。

你可以选择一个整数 k,自左向右每 k 个石子为一段,把 N 个石子分成若干个子段。如果最后一段石子数不足 k 个,则把最后一段石子全部扔掉。

如果两个子段对应位置的石子颜色均相同,则可以视作相同的子段。

注意:子段可以翻转,比如颜色为 1 2 3 的子段和颜色为 3 2 1 的子段被视作相同的子段。

请你选择合适的 k 的值,使得不同子段的数目最多。

你需要输出这个最多数目 Max,以及能达到这个数目的合适的 k 的值有多少个(Num),以及有哪些。

输入

第一行,一个整数 N

接下来一行,N 个整数 ai,表示第 i 个石子的颜色。

输出

第一行:两个整数 Max,Num,一个空格分隔

第二行:Num 个数,表示所有合适的 k 值,从小到大输出,一个空格分隔

样例输入

8
1 2 3 3 2 1 2 3

样例输出

3 2
1 2

样例解释

若 k=1,则可以得到 3 个不同的子段 < 1 >, < 2 >, < 3 >

若 k=2,则可以得到 3 个不同的子段 < 1 2 >, < 3 3 >, < 2 3 >

若 k=3,则可以得到 1 个不同的子段 < 1 2 3 >

若 k=4,则可以得到 2 个不同的子段 < 1 2 3 3 >, < 2 1 2 3 >

若 k>=5 且 k <= 8,则只能得到 1 个不同的子段

综上,当 k=1 或 2 时,可以得到最多 3 个不同的子段

数据范围

约 45% 的数据:n <= 500

100%的数据:n <= 2×10^5, 1 <= ai <= n