题目描述
阿里萨和安娅是文案工作者。最近她们接到一个订单:需要编写 k 个关于相似主题的文本(字符串)。她们迅速开始工作,得到了 k 个字符串 S1,…,Sk,每个字符串的长度不超过 m,且由小写拉丁字母组成,其中 S1 的长度恰好为 m。
她们长期合作,有一个简单的方法来检查工作的原创性。原创性通过检查文本的子串来评估。阿里萨和安娅认为某个字符串是非原创的,如果它及其反转后的字符串在她们的文本中作为子串出现在相同的位置上。
为了加快检查速度,她们将字符串分割成块。分割成 t 个块由序列 a0,a1,…,at 定义,其中 a0=0,at=m,且对于任意 1≤i≤t,ai−1<ai。第 i 个块定义为整数区间 [ai−1+1;ai]。块 [ai−1+1;ai] 被称为有趣的,如果存在一个非原创字符串,恰好在该块定义的位置上出现在文本中。换句话说,块是有趣的,如果存在字符串 Sl 和 Sr(可能 l=r),使得 ∣Sl∣,∣Sr∣≥ai,且字符串 Sl,ai−1+1Sl,ai−1+2…Sl,ai 与字符串 Sr,aiSr,ai−1…Sr,ai−1+1 相同,其中 St,j 是字符串 St 的第 j 个字符。
例如,对于文本 [abba,ba],序列 (0,1,4) 和 (0,1,2,3,4) 定义了有效的分割,而 (1,2,3) 和 (0,1,1,4) 则不是。对于分割 (0,2,4),第一个块 [1;2] 是有趣的,因为 S1,1S1,2=S2,2S2,1= ab,而第二个块 [3;4] 不是有趣的,因为对于唯一可能的对 l=r=1,S1,3S1,4=ba 和 S1,4S1,3=ab 不相同。
分割被称为有趣的,如果其中的每个块都是有趣的。阿里萨和安娅希望找到将文本分割成最少块的有趣分割,以衡量工作的原创性。她们努力使这个问题符合现代标准并通过贝克德尔测试,现在请帮助她们编写一个程序来衡量原创性!
请注意,目标值是明确定义的,因为将字符串分割成 m 个长度为 1 的块总是能得到一个有趣的分割(每个块中可以选择 l=r=1)。
输入格式
第一行包含三个整数 t,k,m (1≤k≤200000,1≤m≤500000),分别表示子任务编号、文本总数和第一个文本的长度。
接下来的 k 行中,第 i 行输入 Si,即第 i 个文本,由小写拉丁字母组成。
保证 ∣S1∣=m,对于任意 i>1,∣Si∣≤m,且所有字符串的总长度不超过 500000。
输出格式
第一行输出一个整数 t,表示有趣分割中最少的块数。
第二行通过空格分隔输出 t−1 个递增的整数 a1,…,at−1,表示除最后一个块外的所有块的右边界编号(分割本身为 [1;a1],[a1+1;a2],…,[at−1+1;m])。
0 2 6
abcded
cba
2
3
0 6 7
poggers
sus
amogus
tokyo
ghoul
sodluv
4
3 5 6
数据范围与提示
详细子任务附加限制及分值如下表所示。其中子任务 0 是样例。
子任务 |
分值 |
附加限制 |
子任务依赖 |
备注 |
1 |
7 |
k≤100,m≤10,L≤1000 |
0 |
|
2 |
8 |
k≤20,m≤100,L≤2000 |
0 |
3 |
10 |
k≤200,m≤200,L≤40000 |
0∼2 |
4 |
12 |
k≤200,m≤2000,L≤400000 |
0∼3 |
5 |
9 |
|
|
保证答案中不超过两个块 |
6 |
11 |
k=1,m≤50000,L≤50000 |
|
7 |
11 |
k=1 |
6 |
8 |
10 |
k=2 |
|
9 |
9 |
m≤200000,L≤200000 |
0∼3,6 |
10 |
13 |
|
0∼9 |