Problem:
Score : 900 points

Problem Statement

Takahashi has an empty string S and a variable x whose initial value is 0.

Also, we have a string T consisting of 0 and 1.

Now, Takahashi will do the operation with the following two steps |T| times.

Insert a 0 or a 1 at any position of S of his choice.

Then, increment x by the sum of the digits in the odd positions (first, third, fifth, ...) of S. For example, if S is 01101, the digits in the odd positions are 0, 1, 1 from left to right, so x is incremented by 2.

Print the maximum possible final value of x in a sequence of operations such that S equals T in the end.

Constraints

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

T consists of 0 and 1.

Input

Input is given from Standard Input in the following format:

T

Output

Print the maximum possible final value of x in a sequence of operations such that S equals T in the end.

Sample Input 1

1101

Sample Output 1

5

Below is one sequence of operations that maximizes the final value of x to 5.

Insert a 1 at the beginning of S. S becomes 1, and x is incremented by 1.

Insert a 0 to the immediate right of the first character of S. S becomes 10, and x is incremented by 1.

Insert a 1 to the immediate right of the second character of S. S becomes 101, and x is incremented by 2.

Insert a 1 at the beginning of S. S becomes 1101, and x is incremented by 1.

Sample Input 2

0111101101

Sample Output 2

26

Solution in C (GCC 9.2.1) (judge verdict: Wrong Answer)

#include <stdio.h>
#include <string.h>
#define max(x, y)  ((x)<(y) ? (y) : (x))
int main(){
  char s[200005];  scanf("%s", s);
  long onecount = 0, len = strlen(s), kisuone = 0;
  int zeroinfo[200005][3], zerolen = 0;
  for(int i=0; i<len; i++){
    if(s[i] == '1'){
      onecount++;
      if(i%2==0)  kisuone++;
    }else{
      zeroinfo[zerolen][0] = i+1;
      zeroinfo[zerolen][1] = max(kisuone, onecount-kisuone);
      zeroinfo[zerolen][2] = onecount;
      zerolen++;
    }
  }
  
  long sum = 0;
  if(onecount % 2){
    sum = ((onecount+1)/2) * ((onecount+1)/2+1) - (onecount+1)/2;
  }else{
    sum = (onecount/2) * (onecount/2 + 1);
  }
  //  printf("sum:%ld  one:%ld\n", sum, onecount);
  long ans = 0;
  for(int i=0; i<zerolen; i++){
    ans = ans + zeroinfo[i][1];
    if(zeroinfo[i][0] % 2){
      ans = ans + (onecount - zeroinfo[i][2])/2;
    }else{
      ans = ans + (onecount - zeroinfo[i][2] + 1)/2;
    }
  }
  ans = ans + sum;

  printf("%ld\n", ans);
  
  return 0;
}