题目描述
给定一个字符串 S = s1s2...sn,定义其翻转区间
[l,r](1≤l≤r≤∣S∣)后得到的字符串为 S′ = $s_1s_2...s_{l−1}s_rs_{r−1} ...s_{l+1}s_ls_{r+1} ...s_n$。
求 S 翻转任意一个区间可以得到的不同的字符串数量。
输入格式
从文件 serenity.in 中读入数据。
一行一个字符串 S。
输出格式
输出到文件 serenity.out 中。
一行一个非负整数表示答案。
样例 1 输入
abcd
样例 1 输出
7
样例 1 解释
共有 10 种不同的翻转方法:
-
翻转区间 [1,1],得到 abcd;
-
翻转区间 [2,2],得到 abcd;
-
翻转区间 [3,3],得到 abcd;
-
翻转区间 [4,4],得到 abcd;
-
翻转区间 [1,2],得到 bacd;
-
翻转区间 [2,3],得到 acbd;
-
翻转区间 [3,4],得到 abdc;
-
翻转区间 [1,3],得到 cbad;
-
翻转区间 [2,4],得到 adcb;
-
翻转区间 [1,4],得到 dcba。
可以得到的字符串为:abcd,bacd,acbd,abdc,cbad,adcb,dcba,共 7 种。
样例 2
见右侧文件下的 serenity2.in 与 serenity2.ans。
数据范围与提示
对于所有测试数据,保证 1≤∣S∣≤3×106,保证 S 中仅包含英文小写字母。
每个测试点的具体限制见下表:
测试点编号 |
∣S∣≤ |
特殊性质 |
1 |
30 |
是 |
2∼4 |
否 |
5 |
300 |
是 |
6∼8 |
否 |
9 |
3000 |
是 |
10∼12 |
否 |
13 |
3×105 |
是 |
14∼16 |
否 |
17 |
3×106 |
是 |
18∼20 |
否 |