小红的神秘密码解锁
题号:NC312123
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小红在一次神秘冒险中遇到了一串由 \texttt{0}\texttt{1} 组成的密码 s。密码的下标从 1 开始,密码中的连续相同字符构成一个“颜色块”(是极长的,即不能再扩展)。
\hspace{15pt}小红可以将密码中的一段连续子串进行 01 翻转(同时将子串中的 \texttt{0} 变成 \texttt{1}\texttt{1} 变成 \texttt{0}),翻转后颜色块的数量可能会改变。她想知道有多少种不同的翻转区间 [l, r]1 \leqq l \leqq r \leqq {\rm length}(s)),使得翻转后颜色块的数量不变。输出满足条件的翻转区间的数量。

输入描述:

\hspace{15pt}在一行上输入一个长度为 {\rm length}(s),仅由 \texttt{0}\texttt{1} 组成的字符串 s\left(1 \leqq {\rm length}(s) \leqq 2 \times 10^5\right)

输出描述:

\hspace{15pt}输出一个整数,表示满足条件的翻转区间的数量。
示例1

输入

复制
011

输出

复制
2

说明

\hspace{15pt}在这个样例中,原字符串有 2 个颜色块:\texttt{\texttt{。一共有六个不同的区间可选:
\hspace{23pt}\bullet\,[1,1],得到字符串 \texttt{,此时只剩下一个颜色块,不符;
\hspace{23pt}\bullet\,[1,2],得到字符串 \texttt{,此时剩下三个颜色块,不符;
\hspace{23pt}\bullet\,[1,3],得到字符串 \texttt{,此时剩下两个颜色块,符合
\hspace{23pt}\bullet\,[2,2],得到字符串 \texttt{,此时剩下两个颜色块,符合
\hspace{23pt}\bullet\,[2,3],得到字符串 \texttt{,此时只剩下一个颜色块,不符;
\hspace{23pt}\bullet\,[3,3],得到字符串 \texttt{,此时剩下三个颜色块,不符。
\hspace{15pt}综上,共有 2 个满足条件的翻转区间。
示例2

输入

复制
0011000

输出

复制
9

说明

\hspace{15pt}在这个样例中,原字符串有 3 个颜色块:\texttt{\texttt{\texttt{