#L5109. 「POI2009 R3」编码 The Code

「POI2009 R3」编码 The Code

题目描述

题目译自 XVI OI Olimpiada Informatyczna – III etap Kod

拜托西亚电信研究所(BIT)负责制定拜托西亚电信网络的数据传输标准。Bajtazar 是 BIT 的计算机科学家,专注于前缀编码——一种特殊的字符表示方法。拜托西亚字母表中的每个字符对应一个位串,称为该字符的编码。这些编码具有以下特性:

  1. 任一字符的编码不是其他字符编码的前缀。例如,若字符 AA 的编码为 010010010010,则 00, 0101, 010010, 01000100, 0100101001 均不可为其他字符的编码,同样,01001000100100, 01001010100101 及以 010010010010 开头的更长位串也不可。

  2. 若某位串 ww 是某字符编码的前缀但不是完整编码,则 w0w0w1w1(即 ww 末尾添加 0011)必为某些字符编码的前缀或完整编码。例如,若 01000100 是字符 AA 编码的前缀,则 01000010000100101001 必须是某些字符编码的前缀或编码。

考虑以下针对字母表 A,B,C,D,EA, B, C, D, E 的示例前缀编码:

字符 编码
A 00
B 10
C 11
D 010
E 011

使用前缀编码对字符序列编码是将各字符的编码依次拼接。例如,序列 BACAEBABAE 编码为 1000110001110001000011

Bajtazar 发现,若丢失若干初始位,解码可能出错或无法解码。例如,移除上述编码的前 55 位,剩余位串 10001110001000011 解码为 BACBABAE,后 55 位(BABAE)正确,但前 33 位(BAC)错误。他注意到,自首个 EE 后所有字符均正确解码,推测只要 EE 的编码位未丢失,其后字符均可正确解码。这一性质对任意含 EE 的编码序列成立。字符 DD 也具有此性质,但 A,B,CA, B, C 没有。

Bajtazar 将字符 EEDD 的这一性质称为同步编码。他委托你编写程序,找出给定前缀编码中的所有同步编码。为节省时间,他决定在二进制显示屏上展示所有字符编码。显示屏有四个按钮:

  • 0:添加 00
  • 1:添加 11
  • B:退格,删除最后添加的数字。
  • X:按下发出哔声,表示当前显示的位串为一个字符编码。

初始显示屏为空,Bajtazar 按顺序操作按钮,每当显示屏上出现一个字符编码时按 X。展示最后一个编码后,他通过若干次 B 清空显示屏。你知道 Bajtazar 将展示完整前缀编码,使用最少的按钮次数。


输入格式

第一行包含一个整数 nn (6n3000000)(6 \leq n \leq 3000000),表示 Bajtazar 按下的按钮次数。
下一行包含一个长度为 nn 的字符串,由字符 0,1,B,X 组成,表示按钮序列。每次按 X 表示一个新字符(字符从 11 编号)。所有编码总长度不超过 10810^8


输出格式

第一行输出一个整数 kk,表示同步编码的数目。
接下来的 kk 行按升序输出同步编码对应字符的编号,每行一个。
若无同步编码,仅输出一行包含 00


样例

输入:

21
11XB0XBB00XB11XB0XBBB

输出:

2
4
5

Bajtazar 显示屏上依次出现的编码为:1111, 1010, 0000, 011011, 010010
其中 011011010010 是同步编码。