分割字符串
题号:NC309250
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

给定一个仅含小写字母的字符串 S,你可将其分割成任意份子串。我们要求分割后任何一段的长度都不大于 5,且相邻的两个子串不能含有相同的字母。例如 `abcdae` 分割为 `abcd` 和 `ae` 都含 `a`,不合法,但可以分割为 `abcda` 和 `e`,或者 `ab`、`cd`、`ae` 等。

问该字符串的所有长度小于等于 5 的本质不同的子串中,哪些在**任何**分割方案中都没有出现过,按字典序将它们全部输出。

输入描述:

输入一行包含一个字符串表示 S

输出描述:

输出的第一行包含一个整数 t,表示题目要求的字符串的数量。

接下来 t 行,每行包含一个要求的字符串 r_i,按字典序排序。
示例1

输入

复制
abab

输出

复制
4
ab
aba
ba
bab

说明


备注:

- 对于 30% 的评测用例,|S| \le 10
- 对于 60% 的评测用例,|S| \le 5000
- 对于所有评测用例,1 \le |S| \le 10^5