Byteotian Institute of Telecommunication (BIT) 为 Byteotia 的所有电信网络制定了数据传输标准。BIT 的工程师 Byteasar 正在研究前缀码——一种表示字符的特定方式。Byteotian 字母表中的每个字符都对应一个位序列,称为该字符的码字。所有字符的码字具有以下性质:
- 没有任何一个码字是另一个码字的前缀(即引导片段)。例如,如果 010010 是字母 A 的码字,那么位序列 0、01、010、0100 或 01001 都不是其他字母的码字。同样,0100100、0100101 以及以 010010 开头的更长序列也不是码字。
- 如果给定的位序列 $w$ 是另一个码字的前缀,但不是完整的码字,那么位序列 $w_0$ 和 $w_1$(即在 $w$ 末尾分别添加 0 或 1)要么是某个码字的前缀,要么是完整的码字。例如,如果 0100 是字母 A 码字的前缀,那么 01000 和 01001 要么是某个码字的前缀,要么是完整的码字。
考虑以下由字符 A、B、C、D 和 E 组成的字母表的前缀码示例:
| 字符 | 码字 |
|---|---|
| A | 00 |
| B | 10 |
| C | 11 |
| D | 010 |
| E | 011 |
使用前缀码对字符序列进行编码,即将连续字符的码字连接起来。例如,序列 BACAEBABAE 的编码为 1000110001110001000011。
Byteasar 注意到,如果丢失了一些前导位,序列可能会被错误解码,甚至根本无法解码。例如,如果删除了上述序列的前五位,得到的序列 10001110001000011 将被解码为 BACBABAE。最后五个字母 (BABAE) 是正确的,但前三个 (BAC) 不正确。Byteasar 进一步注意到,第一个 E 之后的所有字母都被正确解码了。他得出结论:只要 E 的码字的所有位都完整,E 之后的所有字符都将被正确解码。对于包含 E 的任何编码序列,情况也是如此。他还注意到字母 D 也具有此特征,但 A、B 和 C 没有。
由于 E 和 D 的码字具有这些属性,Byteasar 将它们称为同步码字。他委托你编写一个程序,找出给定前缀码的所有同步码字。为了节省时间,他打算在二进制监视器上向你展示所有码字。这个有趣的设备有四个按钮:
0- 追加 01- 追加 1B- 退格;删除最后一位数字X- 蜂鸣!按下此按钮时监视器会发出蜂鸣声。
最初显示屏是空的;Byteasar 通过按下按钮输入连续的码字,当屏幕上出现一个完整的码字时,Byteasar 按下 X。在向你展示最后一个码字后,Byteasar 通过多次按下 B 清除屏幕。他声明他将以最少的按键次数向你展示完整的前缀码。
输入
标准输入的第一行包含一个整数 $n$ ($6 ≤ n ≤ 3\,000\,000$),表示 Byteasar 按下的按钮次数。接下来的行给出了一个长度为 $n$ 的字符串,由字符 '0'、'1'、'B' 和 'X' 组成;这些字符对应于按钮。每次按下按钮 X,一个码字就完成,另一个码字开始。码字从 1 开始编号。所有码字长度之和不超过 $10^8$。
输出
第一行应输出同步码字的个数 $k$。接下来的 $k$ 行应按升序输出同步码字的编号,每行一个。如果给定的前缀码不包含同步码字,则第一行应包含数字 0,且不再输出后续行。
样例
输入格式 1
21 11XB0XBB00XB11XB0XBBB
输出格式 1
2 4 5
说明
Byteasar 的监视器上依次出现的码字为:11, 10, 00, 011, 010。其中,011 和 010 是同步码字。