#NOIp403. Serenity(Serenity)

Serenity(Serenity)

题目描述

给定一个字符串 SS = s1s2...sns_1s_2...s_n,定义其翻转区间 [l,r][l,r]1lrS1 ≤ l ≤ r ≤ |S|)后得到的字符串为 SS^′ = $s_1s_2...s_{l−1}s_rs_{r−1} ...s_{l+1}s_ls_{r+1} ...s_n$。

SS 翻转任意一个区间可以得到的不同的字符串数量。

输入格式

从文件 serenity.inserenity.in 中读入数据。

一行一个字符串 SS

输出格式

输出到文件 serenity.outserenity.out 中。

一行一个非负整数表示答案。

样例 1 输入

abcd

样例 1 输出

7

样例 1 解释

共有 1010 种不同的翻转方法:

  1. 翻转区间 [1,1][1,1],得到 abcdabcd

  2. 翻转区间 [2,2][2,2],得到 abcdabcd

  3. 翻转区间 [3,3][3,3],得到 abcdabcd

  4. 翻转区间 [4,4][4,4],得到 abcdabcd

  5. 翻转区间 [1,2][1,2],得到 bacdbacd

  6. 翻转区间 [2,3][2,3],得到 acbdacbd

  7. 翻转区间 [3,4][3,4],得到 abdcabdc

  8. 翻转区间 [1,3][1,3],得到 cbadcbad

  9. 翻转区间 [2,4][2,4],得到 adcbadcb

  10. 翻转区间 [1,4][1,4],得到 dcbadcba

可以得到的字符串为:abcdbacdacbdabdccbadadcbdcbaabcd,bacd,acbd,abdc,cbad,adcb,dcba,共 77 种。

样例 2

见右侧文件下的 serenity2.inserenity2.inserenity2.ansserenity2.ans

数据范围与提示

对于所有测试数据,保证 1S3×1061≤|S|≤3×10^6,保证 SS 中仅包含英文小写字母。

每个测试点的具体限制见下表:

测试点编号 S|S|≤ 特殊性质
11 3030
242∼4
55 300300
686∼8
99 30003000
101210∼12
1313 3×1053×10^5
141614∼16
1717 3×1063×10^6
182018∼20