CF1483F Exam

题目描述

今年木叶村再次举办中忍选拔考试,参加考试的有 $n$ 名忍者,名字分别为 $s_1$、$s_2$、…、$s_n$。所有名字都互不相同。考试的一个环节是忍者之间的对决。今年决定对决双方的规则如下:如果满足以下条件,忍者 $i$ 和忍者 $j$ 将进行对决: - $i \neq j$; - $s_j$ 是 $s_i$ 的子串; - 不存在除 $i$ 和 $j$ 以外的 $k$,使得 $s_j$ 是 $s_k$ 的子串,且 $s_k$ 是 $s_i$ 的子串。 如果字符串 $a$ 可以通过从字符串 $b$ 的开头删除若干(可能为零或全部)字符,并从结尾删除若干(可能为零或全部)字符得到,则称 $a$ 是 $b$ 的子串。 你的任务是计算今年将会有多少场对决。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 10^6$),表示考生人数。 接下来的 $n$ 行,每行一个字符串,表示他们的名字。没有两个名字相同,所有名字均为非空且仅包含小写英文字母。所有名字的总长度不超过 $10^6$。

输出格式

输出一个整数,表示对决的场数。

说明/提示

在第一个样例中,hidan 会和 dan 对决,hanabi 会和 nabi 对决,nabi 也会和 bi 对决。hanabi 和 bi 不会对决,因为存在名为 nabi 的忍者,满足第三个条件。 在第二个样例中,abacaba 和 acaba、abacaba 和 abaca、acaba 和 aca、abaca 和 aca 之间会进行对决。 由 ChatGPT 4.1 翻译