信条-TeneT

定义一个字符串

是「廻文串」,当且仅当其满足以下条件之一:


,即

是一个单字符;


由非空字符串

和其反转

拼接两遍构成,即

,更具体地说,记

的长度为

,则:

,长度为

。

定义一个字符串的连续子串是「廻文子串」,当且仅当其是「廻文串」。

现在,给定一个字符串

,下标从

开始,请你求解:


一共有多少个「廻文子串」;

最少需要多少个「廻文子串」才能够覆盖这个字符串(
不要求恰好覆盖,即可以存在选中的廻文子串之间存在重叠),更具体地——对于字符串

的

个 廻文子串
![\{s[l_i..r_i]\}_{i=1}^k](https://www.nowcoder.com/equation?tex=%5C%7Bs%5Bl_i..r_i%5D%5C%7D_%7Bi%3D1%7D%5Ek)
,若对于任意
![p \in [1, |s|]](https://www.nowcoder.com/equation?tex=p%20%5Cin%20%5B1%2C%20%7Cs%7C%5D)
,存在
![i \in [1, k]](https://www.nowcoder.com/equation?tex=i%20%5Cin%20%5B1%2C%20k%5D)
使得

,则称这

个子串覆盖了

;能取到的最小的

即为答案,也可以称为最小覆盖数。