Problem:
Score : 300 points

Problem Statement

There are N Reversi pieces arranged in a row. (A Reversi piece is a disc with a black side and a white side.)
The state of each piece is represented by a string S of length N.
If S_i=B, the i-th piece from the left is showing black;
If S_i=W, the i-th piece from the left is showing white.

Consider performing the following operation:

Choose i (1 \leq i < N) such that the i-th piece from the left is showing black and the (i+1)-th piece from the left is showing white, then flip both of those pieces. That is, the i-th piece from the left is now showing white and the (i+1)-th piece from the left is now showing black.

Find the maximum possible number of times this operation can be performed.

Constraints

1 \leq |S| \leq 2\times 10^5

S_i=B or W

Input

Input is given from Standard Input in the following format:

S

Output

Print the maximum possible number of times the operation can be performed.

Sample Input 1

BBW

Sample Output 1

2

The operation can be performed twice, as follows:

Flip the second and third pieces from the left.

Flip the first and second pieces from the left.

Sample Input 2

BWBWBW

Sample Output 2

6

Solution in C++14 (GCC 5.4.1) (judge verdict: Time Limit Exceeded)

#include <iostream>

using namespace std;
int main(int argc, char const *argv[]) {
  cin.tie(0);
  ios::sync_with_stdio(false);
  string s;
  cin >> s;
  int ans = 0;

  int sc = s.find("BW");
  int lc = s.size() - 1;
  while (true) {
    int temp = 0;
    int tsc = sc;
    int tlc = 0;

    if (s[tsc] == 'B' && s[tsc + 1] == 'W') {
      s[tsc] = 'W';
      s[tsc + 1] = 'B';
      temp++;
      tsc--;
    }

    for (int i = sc + 1; i < lc ; i++) {
      //cout << s[i] << s[i + 1] << "\n";
      if (s[i] == 'B' && s[i + 1] == 'W') {
        s[i] = 'W';
        s[i + 1] = 'B';
        temp++;
        tlc = i;
      }
    }
    if (temp == 0) break;
    ans += temp;
    sc = tsc;
    lc = tlc;
  }

  cout << ans << "\n";
  return 0;
}