题目描述
今天Kiana想出一道字符串题,最好是和回文串相关的那种,由于她不会出题,所以就随手写下了一个字符串S。
贪玩的Kiana尝试翻转这个字符串的一个连续子串slsl+1⋯sr−1sr,即进行如下操作:对于字符串S=s1s2⋯sl−1slsl+1⋯sr−1srsr+1⋯sn−1sn,对其翻转Kiana指定的子串slsl+1⋯sr−1sr后字符串将变为S=s1s2⋯sl−1srsr−1⋯sl+1slsr+1⋯sn−1sn。聪明的Kiana还发现,对于长度为n的字符串,一共有2n(n+1)个不同的子串可以翻转,真是太有趣了!
但是Kiana意识到,翻转某些子串并不会得到新的子串,而翻转某些不同的子串可能会得到相同的新字符串,所以她想知道,通过翻转S的一个子串,可以得到的不同字符串数量是多少。由于Kiana自己不会算,所以希望你能够帮助她。
输入输出格式
输入格式
第一行包含一个字符串S,表示Kiana写下的字符串。
输出格式
输出共一行,包含一个正整数,表示翻转S的一个子串可以得到的不同字符串数量。
输入输出样例
输入样例#1:
输出样例#1:
输入样例#2:
turn2.in
输出样例#2:
turn2.out
样例解释
在输入输出样例1中,Kiana写下的字符串为abcd,她有10种不同的翻转方法:
翻转子串s1,得到字符串abcd
翻转子串s2,得到字符串abcd
翻转子串s3,得到字符串abcd
翻转子串s4,得到字符串abcd
翻转子串s1s2,得到字符串bacd
翻转子串s2s3,得到字符串acbd
翻转子串s3s4,得到字符串abdc
翻转子串s1s2s3,得到字符串cbad
翻转子串s2s3s4,得到字符串adcb
翻转子串s1s2s3s4,得到字符串dcba
综上所述,Kiana可能得到abcd,bacd,acbd,abdc,cbad,adcb,dcba,所以输出的答案为7。
数据范围
对于20%的数据,保证1≤∣S∣≤30。
对于40%的数据,保证1≤∣S∣≤300。
对于60%的数据,保证1≤∣S∣≤3000。
对于80%的数据,保证1≤∣S∣≤300000。
对于100%的数据,保证1≤∣S∣≤3×106。
上面每一档数据中,都有25%的数据,保证S中只包含字母a和b,对于100%的数据,保证S中只含小写字母。