Gene

题目描述

高中生物中提到,酶切位点 是基因序列上一段特定的碱基序列,而 限制性核酸内切酶 能够识别出这个序列并在对应的切割位置将基因序列切成两段。

现有一种名为 EcoRI\texttt{EcoRI} 的限制酶,其识别序列为 GAATTC,切割位置在 GA 之间。

给出一段长度为 nn 的基因序列(仅由 A/T/G/C 组成的字符串),请你判断使用 EcoRI\texttt{EcoRI} 在理想条件下能将此序列切成几个部分,并输出每个切割位置 左侧 碱基的下标。

定义该基因序列的下标从左到右分别为 1,2,3,,n1, 2, 3, \dots, n

输入格式

11 行一个正整数 nn 表示基因序列长度。

22 行一个长度为 nn 的字符串表示基因序列,保证只出现 A/T/G/C 四种字符。

输出格式

11 行输出一个正整数 xx,表示 EcoRI\texttt{EcoRI} 在理想条件下能将给出序列切成 xx 个部分。

22 行从小到大输出 x1x-1 个正整数,表示每个切割位置 左侧 碱基的下标。

样例输入

15
GATCGGAATTCTTCA

样例输出

2
6

样例说明

显然,对于此样例,容易找到 EcoRI\texttt{EcoRI} 的识别序列和切割位点:GATCGG↓AATTCTTCA\texttt{GATCG}\color{red}{\texttt{G↓AATTC}}\texttt{TTCA}

所以,可以将原基因序列切割成 22 部分,切割位置左侧碱基 G 的下标为 66

数据范围

6n1076 \le n \le 10^7

其实就是个 KMP 板子题,已经不能再板子了。(如果不能理解题面,可以看样例说明)