P3494 [POI 2009] KOD-The Code

题目描述

## 题面翻译

输入格式

定义对一个 $01$ 串进行解码的过程是,每次找到一个前缀,满足它对应一个字符,容易知道这样的前缀是唯一的。将这个字符加入答案,将这个前缀从原串中删掉,如果不存在这样的前缀,则解码的结果是未定义。记 $s$ 解码的结果是 $\mathrm{decode}(s)$。 设一个字符编码为 $a$,定义它是好的,当且仅当对于任意两个串 $s,t$,对于 $\mathrm{encode}(s)$ 的任意后缀 $p$,有 $\mathrm{decode}(p+a)$ 不是未定义,且 $\mathrm{decode}(p+a+\mathrm{encode}(t))=\mathrm{decode}(p+a)+t$。求哪些字符是好的。 第一行一个数 $n$,表示操作次数。接下来一行一个长 $n$ 的字符串,其中 `0`/`1` 表示在当前结点添加一个儿子,边权为 `0`/`1`,并移动过去;`B`表示添加一个父亲;`X`表示当前结点是一个字符的编码。保证输入是描述这棵 trie 的最短的可能输入。$n\leq 3\times 10^6$ ,所有字符编码的总长 $\leq 10^8$ 。

输出格式

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