luogu#P6139. 【模板】广义后缀自动机(广义 SAM)

【模板】广义后缀自动机(广义 SAM)

题目背景

管理员备注:本题于 2023 年 5 月 4 日加入输出点数的要求。本题在此之前提交的题解均没有输出点数,特此注明。

题目描述

给定 nn 个由小写字母组成的字符串 s1,s2sns_1,s_2\ldots s_n,求本质不同的子串个数。(不包含空串)

进一步,设 QQ 为能接受 s1,s2,,sns_1,s_2,\dots,s_n 的所有后缀的最小 DFA,请你输出 QQ 的点数。(如果你无法理解这句话,可以认为就是输出 s1,s2,,sns_1,s_2,\dots,s_n 建成的“广义后缀自动机”的点数)。

输入格式

第一行一个正整数 nn

以下 nn 行,每行一个字符串,第 ii 行表示字符串 si1s_{i-1}

输出格式

第一行一个正整数,为本质不同的子串个数。

第二行一个正整数,为 QQ 的点数。

4
aa
ab
bac
caa
10
10
1
a
1
2

提示

数据范围:1n41051\le n\le 4\cdot 10^51si1061\le \sum{|s_i|}\le 10^6

样例 1 解释:共有 1010 个本质不同的子串,它们是:"a","b","c","aa","ab","ac","ba","ca","bac","caa"。 DFA 结构略去。

样例 2 解释:共有 11 个本质不同的子串,它们是:"a"。DFA 包含一个起始结点 SS 和一个结点 TT,有一条边 STS\to T,其上字符为 a。故总结点数为 2。