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 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>

char lowcmp[26]="abcdefghijklmnopqrstuvwxyz";
char upcmp[26]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
long long mod=1000000007;
int max(int A,int B){return A>B?A:B;}
int min(int A,int B){return A<B?A:B;}
void swap(int *A,int *B){int T;T=*A;*A=*B;*B=T;}
int gcd(int A,int B){return min(A,B)==0?max(A,B):gcd(min(A,B),max(A,B)%min(A,B));}
int lcm(int A,int B){return A*B/gcd(A,B);}
int ntoi(char C){return C-'0';}
int ltoi(char C){return C-'a';}
int utoi(char C){return C-'A';}
int AscendingSort(const void *A,const void *B){return *(int*)A>*(int*)B?1:0;}
int DescendingSort(const void *A,const void *B){return *(int*)A<*(int*)B?1:0;}

int main(void){
    //qsort (a,n,sizeof(int),AscendingSort); //昇順ソート
    //qsort (a,n,sizeof(int),DescendingSort); //降順ソート
    int ans=0,tmp=0;
    char s[200020];
    scanf("%s",s);
    for (int i=0; i<strlen(s); i++){
        if (s[i]=='B'){
            tmp++;
        }
        if (s[i]=='W'){
            ans+=tmp;
        }
    }
    printf("%d\n",ans);
	return 0 ;
}