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 翻译