#hASHybttg020107. 1461:Beads

1461:Beads

好的,这是整理好的题面,格式清晰。


题目描述

Zxl 制造一条项链,她有一长条珊瑚珠子(长度为 ( n )),每个珠子有颜色 ( a_i )。
她有一个机器,能把珠子切成很多块(子串),每块有 ( k )(( k > 0 ))个珠子。
如果珠子的长度不是 ( k ) 的倍数,最后不足 ( k ) 个珠子的块就不要了(浪费掉)。

Zxl 想要得到尽可能多的不同的子串(子串可以反转,即子串 ((1,2,3)) 和 ((3,2,1)) 视为相同)。

写一个程序,为 Zxl 决定最适合的 ( k ),使得能得到最多的不同子串,并输出:

  1. 最大不同子串个数;
  2. 能获得最大值的 ( k ) 的个数;
  3. 所有这样的 ( k )(从小到大)。

输入格式

第一行一个整数 ( n ),代表珠子的长度。
第二行 ( n ) 个整数 ( a_i )(( 1 \le a_i \le n )),表示珠子颜色。

输出格式

第一行两个整数:第一个是最大不同的子串个数,第二个是能获得最大值的 ( k ) 的个数。
第二行输出所有能获得最大值的 ( k ),用空格隔开(按升序)。


数据范围

( n \le 200000 )


输入样例

21
1 1 1 2 2 2 3 3 3 1 2 3 3 1 2 2 1 3 3 2 1

输出样例

6 1
2

样例解释

珠子的颜色序列为: ( 1,1,1,2,2,2,3,3,3,1,2,3,3,1,2,2,1,3,3,2,1 )

分析

对于每个 ( k ),将序列切成若干个长度为 ( k ) 的块(最后不足 ( k ) 的丢弃),每个块可以正向或反向(两者视为相同)。统计不同的块的数量。

题目举例(与输入一致):

  • ( k=1 ):有 3 个不同的子串:(1), (2), (3)
  • ( k=2 ):有 6 个不同的子串:(1,1), (1,2), (2,2), (3,3), (3,1), (2,3)
  • ( k=3 ):有 5 个不同的子串:(1,1,1), (2,2,2), (3,3,3), (1,2,3), (3,1,2)
  • ( k=4 ):有 5 个不同的子串:(1,1,1,2), (2,2,3,3), (3,1,2,3), (3,1,2,2), (1,3,3,2)

其中最大不同子串个数为 6,此时 ( k = 2 ),且只有这一个 ( k ) 能达到 6。


输出:

6 1
2