#P3494. [POI 2009] KOD-The Code

[POI 2009] KOD-The Code

Description

题面翻译

Input Format

定义对一个 0101 串进行解码的过程是,每次找到一个前缀,满足它对应一个字符,容易知道这样的前缀是唯一的。将这个字符加入答案,将这个前缀从原串中删掉,如果不存在这样的前缀,则解码的结果是未定义。记 ss 解码的结果是 decode(s)\mathrm{decode}(s)

设一个字符编码为 aa,定义它是好的,当且仅当对于任意两个串 s,ts,t,对于 encode(s)\mathrm{encode}(s) 的任意后缀 pp,有 decode(p+a)\mathrm{decode}(p+a) 不是未定义,且 $\mathrm{decode}(p+a+\mathrm{encode}(t))=\mathrm{decode}(p+a)+t$。求哪些字符是好的。

第一行一个数 nn,表示操作次数。接下来一行一个长 nn 的字符串,其中 0/1 表示在当前结点添加一个儿子,边权为 0/1,并移动过去;B表示添加一个父亲;X表示当前结点是一个字符的编码。保证输入是描述这棵 trie 的最短的可能输入。n3×106n\leq 3\times 10^6 ,所有字符编码的总长 108\leq 10^8

Output Format

一行一个数,表示好的字符的数量。

接下来若干行,从小到大输出每个好的字符是第几个X生成的。

21
11XB0XBB00XB11XB0XBBB

2
4
5