#dwacon5thfinald. [dwacon5th_final_d]Parentheses Inversions

[dwacon5th_final_d]Parentheses Inversions

问题描述

DWANGO员工Niwango喜欢括号匹配的字符串。今天,他决定玩一下重新排列括号的游戏。

Niwango有一个仅由()组成的长度为N的字符串S,其中S中包含相同数量的()

称满足以下条件的数列p为好数列:

  • 对于 (1,2,3,...,N)(1, 2, 3, ..., N) 进行重新排列得到
  • 字符串 tt 满足 ti=spit_i = s_{p_i},即tt是一个平衡的括号序列

计算所有好数列的逆序对数,并输出其和对 109+710^{9}+7 取余。

这里,数列p的逆序对数被定义为满足pi>pjp_i > p_j的数对(i,j)(i, j)i<ji < j)的个数。而“平衡的括号序列”定义如下:

  1. 空字符串是平衡的括号序列
  2. rr是平衡的括号序列,则字符串(rr)按顺序拼接得到的字符串也是平衡的括号序列
  3. 若两个平衡的括号序列按顺序拼接得到的字符串也是平衡的括号序列
  4. 只有通过上述规则生成的字符串才是平衡的括号序列

约束条件

  • 2N5×1052 \leq N \leq 5 \times 10^5
  • SS 只包含()
  • SS 中包含相同数量的(和`)$
  • S=N|S| = N

输入

输入按以下格式从标准输入中给出。

NN SS

输出

输出答案。


输入示例1

2
)(

输出示例1

1

pp 的可能数列有 (1,2)(1, 2)(2,1)(2, 1),对应的字符串 tt 分别是)(()。满足条件的好数列只有(2,1)(2, 1),它的逆序对数为1。


输入示例2

6
(())()

输出示例2

1060

输入示例3

16
)())()((((()))()

输出示例3

58589334

不要忘记将答案对 109+710^{9}+7 取余。