翻转游戏

题目描述

​ 今天Kiana想出一道字符串题,最好是和回文串相关的那种,由于她不会出题,所以就随手写下了一个字符串SS
​ 贪玩的Kiana尝试翻转这个字符串的一个连续子串slsl+1sr1srs_ls_{l+1}\cdots s_{r-1}s_r,即进行如下操作:对于字符串S=s1s2sl1slsl+1sr1srsr+1sn1snS=s_1s_2\cdots s_{l-1}s_ls_{l+1}\cdots s_{r-1}s_rs_{r+1}\cdots s_{n-1}s_n,对其翻转Kiana指定的子串slsl+1sr1srs_ls_{l+1}\cdots s_{r-1}s_r后字符串将变为S=s1s2sl1srsr1sl+1slsr+1sn1snS=s_1s_2\cdots s_{l-1}s_rs_{r-1}\cdots s_{l+1}s_ls_{r+1}\cdots s_{n-1}s_n。聪明的Kiana还发现,对于长度为nn的字符串,一共有n(n+1)2\frac{n(n+1)}{2}个不同的子串可以翻转,真是太有趣了!
​ 但是Kiana意识到,翻转某些子串并不会得到新的子串,而翻转某些不同的子串可能会得到相同的新字符串,所以她想知道,通过翻转S的一个子串,可以得到的不同字符串数量是多少。由于Kiana自己不会算,所以希望你能够帮助她。

输入输出格式

输入格式
第一行包含一个字符串SS,表示Kiana写下的字符串。
输出格式
输出共一行,包含一个正整数,表示翻转S的一个子串可以得到的不同字符串数量。

输入输出样例

输入样例#1:

abcd

输出样例#1:

输入样例#2:

turn2.in

输出样例#2:

turn2.out

样例解释

​ 在输入输出样例1中,Kiana写下的字符串为abcdabcd,她有1010种不同的翻转方法:
​ 翻转子串s1s_1,得到字符串abcdabcd
​ 翻转子串s2s_2,得到字符串abcdabcd
​ 翻转子串s3s_3,得到字符串abcdabcd
​ 翻转子串s4s_4,得到字符串abcdabcd
​ 翻转子串s1s2s_1s_2,得到字符串bacdbacd
​ 翻转子串s2s3s_2s_3,得到字符串acbdacbd
​ 翻转子串s3s4s_3s_4,得到字符串abdcabdc
​ 翻转子串s1s2s3s_1s_2s_3,得到字符串cbadcbad
​ 翻转子串s2s3s4s_2s_3s_4,得到字符串adcbadcb
​ 翻转子串s1s2s3s4s_1s_2s_3s_4,得到字符串dcbadcba
​ 综上所述,Kiana可能得到abcd,bacd,acbd,abdc,cbad,adcb,dcbaabcd,bacd,acbd,abdc,cbad,adcb,dcba,所以输出的答案为77

数据范围

​ 对于20%20\%的数据,保证1S301\leq|S|\leq 30
​ 对于40%40\%的数据,保证1S3001\leq|S|\leq 300
​ 对于60%60\%的数据,保证1S30001\leq|S|\leq 3000
​ 对于80%80\%的数据,保证1S3000001\leq|S|\leq 300000
​ 对于100%100\%的数据,保证1S3×1061\leq|S|\leq 3\times 10^6
​ 上面每一档数据中,都有25%25\%的数据,保证SS中只包含字母aabb,对于100%100\%的数据,保证SS中只含小写字母。

信息

ID
1020
难度
9
分类
(无)
标签
(无)
递交数
1
已通过
1
通过率
100%
上传者