#312. 括号序列

括号序列

下发文件

题目描述

给一个由左右括号构成的字符串 SS ,对于每一个位置 ii ,输出有多少个子串,满足这个子串是一个合法的括号序列,并且 ii 这个位置在子串中。

其中合法的括号序列定义如下:

  • 空串是合法的。
  • 如果 S 是合法的,那么(S) 也是合法的。
  • 如果 U , V 是合法的,那么 UV 也是合法的。

输入格式

一行,一个由左右括号构成的字符串 SS

输出格式

由于答案可能很大,输出 (iansimod(109+7))∑ (i ⋅ ans_i \mod (10^9 + 7)) 即可,其中 ansians_i 表示第 ii 个位置的答案。注意这里我们要先取模,再相加。

样例1输入

(()())

样例1输出

49

样例1解释

这里的 ansans 分别为 1,3,3,3,3,11,3,3,3,3,1

样例2输入

见下发文件。

样例2输出

见下发文件。

数据规模

共十组数据。

对于 30%30\% 的数据,保证 S5000|S| ≤ 5000

对于 70%70\% 的数据,保证 S106|S| ≤ 10^6

对于 100%100\% 的数据,保证 S107|S| ≤ 10^7