世界上还没有足够多的编程语言。为了解决这个问题,C语言完美化内部委员会(ICPC)计划构建一种全新的编程语言:Latam++。
在 Latam++ 中,变量名仅由一个或多个英文小写字母组成。合法的表达式是一个“格式良好”的字符串,表示如何使用四个算术二元运算符“+”、“-”、“*”和“/”以及可能存在的括号来组合变量。
形式上,合法表达式恰好是可以通过以下规则生成的字符串:
- 一个变量名是一个合法表达式。
- 在任何合法表达式两端加上括号会产生另一个合法表达式。
- 如果 $A$ 和 $B$ 是合法表达式,那么拼接得到的 $AcB$ 也是一个合法表达式,其中 $c$ 是四个算术二元运算符“+”、“-”、“*”和“/”中的任意一个。
因此,以下都是合法表达式:
a+ba+b*(c+b)atoms+boots*(charly+bob)(((a)))*(bbasdsaqwe/a/a/a)
相反,以下不是合法表达式:
a+a+b(c+b)atoms+boots*((charly+bob)((()))*(bbasdsaqwe/a/a/a)
该语言还远未完成,在 Latam++ 的第一个版本发布之前,可能需要 ICPC 进行数十年的辩论。与此同时,我们将只关注其编译器的一个特定且非常特殊的功能,称为自动合法子串表达式计数(AVSEC)。
AVSEC 是一个极其有用的功能,编译器会报告给定字符串中作为合法表达式的子串总数。你的任务是实现 AVSEC。
为了计数,如果两个子串的起始或结束索引不同,则它们被视为不同的子串,即使它们对应的字符串是相同的(即它们是相同的字符序列)。
输入格式
输入仅包含一行,其中包含一个字符串 $S$ ($1 \le |S| \le 2 \times 10^5$),该字符串由小写字母、左括号或右括号以及四个字符“+”、“-”、“*”和“/”组成。
输出格式
输出一行,包含一个整数,表示 $S$ 中作为合法表达式的子串数量。
样例
输入样例 1
a+b(c+b)
输出样例 1
7
说明
样例 1 说明: 这七个子串分别是:“a”、“a+b”、“b”(第三个字符)、“(c+b)”、“c”、“c+b”和“b”(第七个字符)。
输入样例 2
aa
输出样例 2
3
输入样例 3
a-a
输出样例 3
3