#3589. 子串序列计数

子串序列计数

题目描述

给定一个字符串 ss。每一对满足 1≤l≤r≤∣s∣1 \le l \le r \le |s| 的数对 (l,r)(l, r) 都对应字符串 ss 的一个子串:从位置 ll 开始、到位置 rr(含)结束。

定义两个字符串的函数 F(x,y)F(x, y) 如下:找出所有使 xx 的对应子串等于字符串 yy 的数对 (l,r)(l, r),把这些数对按第一个数递增排序,则 F(x,y)F(x, y) 等于列表中非空连续段("连续段"指数对在序列中位置连续)的个数。

例如:F(babbabbababbab,babb)=6F(babbabbababbab, babb) = 6。数对列表为:

(1,4), (4,7), (9,12)

它的非空连续段有:

  • (1,4)
  • (4,7)
  • (9,12)
  • (1,4), (4,7)
  • (4,7), (9,12)
  • (1,4), (4,7), (9,12)

你的任务是:对给定的字符串 ss,求所有属于 ss 子串集合的字符串 xx 的 F(s,x)F(s, x) 之和。

输入格式

唯一一行包含给定字符串 ss,只由小写拉丁字母组成(1≤∣s∣≤1051 \le |s| \le 10^5)。

输出格式

输出一个数——所求的和。

aaaa
20
abcdef
21

说明/提示

第一组样例中,xx 取 "a"、"aa"、"aaa"、"aaaa" 时函数值分别为 10、6、3、1。

第二组样例中,对每个满足条件的 xx,函数值都等于 1。