CF666A Reberland Linguistics
题目描述
Berland 国立和平与友谊学院培养了一流的专业人才。你是这所大学最有才华的学生之一。这里的学习并不轻松,因为你需要在多个不同领域具备扎实的基础知识,而这些领域有时候彼此之间并不相关。
例如,你必须精通语言学。你在学习作为外语的 Reberland 语言。该语言中的单词按照如下规则构造:首先需要选择单词的词根——也就是一段长度超过 $4$ 个字母的字符串。然后,可以在这个词根后面添加若干长度为 $2$ 或 $3$ 的字符串。唯一的限制是不能连续两次添加相同的字符串。这些字符串都被视为单词的后缀(这里的“后缀”指的是词素的概念,而不是我们通常理解的字符串最后几个字符的后缀)。
下面是一道你在任务清单上发现的练习题:给定一个单词 $s$,请你找出所有可以作为其后缀的、不重复的长度为 $2$ 或 $3$ 的字符串,这些后缀需符合 Reberland 语言构词规则。
如果两个字符串长度不同,或在某一位置上字符不同,则视为不同的字符串。
例如,给定单词 $abacabaca$,这个单词可以通过下图构造而成(下图中词根带有下划线,每个后缀以“角”符号标出):。因此,该单词所有可能的后缀集合为 $\\{aca,ba,ca\\}$。
输入格式
输入仅一行,包含一个由小写英文字母组成的字符串 $s$($5 \\leq |s| \\leq 10^{4}$)。
输出格式
第一行输出一个整数 $k$,表示满足条件的不重复后缀数量。接下来的 $k$ 行,每行输出一个后缀。
要求按字典序(字母顺序)输出这些后缀。
说明/提示
第一个测试样例已在题目描述中分析。
在第二个样例中,字符串长度等于 $5$。根的长度为 $5$,所以没有任何字符串可以作为后缀。
由 ChatGPT 5 翻译