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 <iostream>
#include <fstream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <deque>
#include <bitset>
#include <algorithm>
#include <complex>
#include <array>
#include <functional>
using namespace std;

#define REP(i,n) for(int i=0; i<n; ++i)
#define FOR(i,a,b) for(int i=a; i<=b; ++i)
#define FORR(i,a,b) for (int i=a; i>=b; --i)
#define ALL(c) (c).begin(), (c).end()

typedef long long ll;
typedef vector<int> VI;
typedef vector<ll> VL;
typedef vector<double> VD;
typedef vector<VI> VVI;
typedef vector<VL> VVL;
typedef vector<VD> VVD;
typedef pair<int,int> P;
typedef pair<ll,ll> PL;

template<typename T> void chmin(T &a, T b) { if (a > b) a = b; }
template<typename T> void chmax(T &a, T b) { if (a < b) a = b; }

int in() { int x; scanf("%d", &x); return x; }
ll lin() { ll x; scanf("%lld", &x); return x; }

int main(void){
    string s;
    cin >> s;
    int n = s.length();
    VI a(n);
    REP(i,n) a[i] = s[i] - '0';
    ll zs = 0;
    REP(i,n) zs += (a[i] == 0);
    int z = 0, o = 0;
    VI zeros, is1;
    REP(i,n){
        if (a[i] == 0) z++;
        else{
            if (i == 0 || o > 0 || z > 0){
                zeros.push_back(z);
                is1.push_back(o);
                z = 0;
                o = 0;
            }else{
                o++;
            }
        }
    }
    zeros.push_back(z);
    is1.push_back(o);
    n = zeros.size() - 1;
    // REP(i,n + 1){
    //     cout << zeros[i] << " " << is1[i] << endl;
    // }
    // cout << zs << endl;
    REP(i,n){
        is1[i] = is1[i + 1];
        if (!is1[i] && i < n - 1){
            zeros[i + 1]--;
            zs--;
        }
    }
    // cout << zs << endl;

    // cout << endl;
    // REP(i,n+1){
    //     cout << zeros[i] << " " << is1[i] << endl;
    // }

    ll ans = 0;
    REP(i,n) ans += 2 * (n - i) - 1;

    ll sum = 0;
    REP(i,n){
        sum += zeros[i];
        if (is1[i]) ans += zs;
        else {
            ans += zs - sum;
            ans += sum / 2;
        }
    }
    cout << ans << endl;

    return 0;
}