【模板】广义后缀自动机(广义 SAM)
题目背景
管理员备注:本题于 2023 年 5 月 4 日加入输出点数的要求。本题在此之前提交的题解均没有输出点数,特此注明。
题目描述
给定 $n$ 个由小写字母组成的字符串 $s_1,s_2\ldots s_n$,求本质不同的子串个数。(不包含空串)
进一步,设 $Q$ 为能接受 $s_1,s_2,\dots,s_n$ 的所有后缀的最小 DFA,请你输出 $Q$ 的点数。(如果你无法理解这句话,可以认为就是输出 $s_1,s_2,\dots,s_n$ 建成的“广义后缀自动机”的点数)。
输入输出格式
输入格式
第一行一个正整数 $n$。
以下 $n$ 行,每行一个字符串,第 $i$ 行表示字符串 $s_{i-1}$。
输出格式
第一行一个正整数,为本质不同的子串个数。
第二行一个正整数,为 $Q$ 的点数。
输入输出样例
输入样例 #1
4
aa
ab
bac
caa
输出样例 #1
10
10
输入样例 #2
1
a
输出样例 #2
1
2
说明
数据范围:$1\le n\le 4\cdot 10^5$,$1\le \sum{|s_i|}\le 10^6$。
样例 1 解释:共有 $10$ 个本质不同的子串,它们是:`"a","b","c","aa","ab","ac","ba","ca","bac","caa"`。 DFA 结构略去。
样例 2 解释:共有 $1$ 个本质不同的子串,它们是:`"a"`。DFA 包含一个起始结点 $S$ 和一个结点 $T$,有一条边 $S\to T$,其上字符为 `a`。故总结点数为 2。