CF886D Restoration of string
题目描述
一个字符串的某个子串被称为最频繁的子串,如果它在该字符串中出现的次数不少于任何其他子串出现的次数。
现给定一个字符串集合。如果一个字符串(不一定来自给定集合),使得集合中的所有字符串都是它的最频繁子串,那么称这样的字符串为“好字符串”。请还原一个最短的非空好字符串。如果有多个,输出字典序最小的那一个。如果不存在好字符串,输出 "NO"。
一个字符串的子串是指该字符串中某些连续的字母组成的串。例如,"ab"、"c"、"abc" 都是字符串 "abc" 的子串,而 "ac" 不是。
某个子串在字符串中的出现次数,是指它作为子串出现的起始位置的数量(这些出现可以重叠)。
如果字符串 $a$ 是 $b$ 的前缀,或在第一处不同的字母位置 $a$ 比 $b$ 小,那么 $a$ 的字典序小于 $b$。
输入格式
第一行包含一个整数 $n$($1 \leq n \leq 10^{5}$),表示字符串集合中的字符串数量。
接下来的 $n$ 行,每行包含一个只由小写英文字母组成的非空字符串。保证这些字符串两两不同。
所有字符串的总长度不超过 $10^{5}$。
输出格式
输出一个最短的非空好字符串。如果有多个,输出其中字典序最小的一个。如果不存在好字符串,输出 "NO"。
说明/提示
可以证明,在第一个样例中,只有 “cfmailru” 和 “mailrucf” 是最短的好字符串。其中 "cfmailru" 的字典序更小。
由 ChatGPT 5 翻译