#7115. 这里怎么全是阿蒙
这里怎么全是阿蒙
Background
克莱恩收到了一份秘密聚会的来宾名单。为了隐藏身份,每位来宾都使用一个仅由小写英文字母组成的代号。
名单背面写着一条警告:
代号的开头越相似,来宾就越有可能是同一个人的分身。
克莱恩决定展开调查。
第一位来宾戴上了单片眼镜。
第二位来宾也戴上了单片眼镜。
负责调查的工作人员看了看他们,同样戴上了单片眼镜。
“既然大家都到了,”其中一位来宾说,“不如查查谁最像阿蒙。”
Description
共有 位来宾,第 位来宾的代号为 。不同来宾可以使用相同的代号。
两位来宾的“可疑值”定义为他们代号的最长公共前缀长度:从第一个字符开始依次比较,直到出现不同字符或其中一个字符串结束,之前连续相同的字符数量就是可疑值。
例如,amon 与 amog 的可疑值为 ,am 与 amon 的可疑值为 ,amon 与 klein 的可疑值为 。
每位来宾都要检查全部 位来宾,包括自己。因此一共进行 次检查。第 位检查第 位与第 位检查第 位分别计数;检查自己时,可疑值等于自己的代号长度。
请计算所有检查的可疑值之和,对 取模。即计算:
$$\left(\sum_{i=1}^{n}\sum_{j=1}^{n}\operatorname{LCP}(s_i,s_j)\right)\bmod 998244353.$$“为什么连自己也要查?”
“为了保证调查公正。”阿蒙扶了扶单片眼镜,在自己的名字旁写下了“非常可疑”。
Format
Input
第一行一个整数 ,表示来宾数量。
接下来 行,每行一个非空字符串 ,表示第 位来宾的代号。
保证 ,字符串仅包含小写英文字母,且所有字符串的长度之和不超过 。
Output
输出一个整数,表示所有检查的可疑值之和对 取模的结果。
Samples
3
am
amon
amog
24
Explanation
三位来宾分别进行检查,得到的可疑值如下:
| 调查员的代号 | 检查 am | 检查 amon | 检查 amog |
|---|---|---|---|
| am | 2 | 2 | |
| amon | 4 | 3 | |
| amog | 3 | 4 | |
总和为 。每个人都很可疑,尤其是他们自己。
Limitation
时间限制:每个测试点 秒。
空间限制:每个测试点 MiB。
(建议先去了解Trie树后再去做这道题)