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# (.NET Core 3.1.201) (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
	static void Main() => new Program().Solve();

	void Solve()
	{
		var t = Console.ReadLine();

		var x = 0L;
		var tt = t.Replace("0", "");

		for (var i = 0; i < tt.Length; i++) {
			x += (i + 2) >> 1;
		}

		var pos = t.Length - 1;
		var 奇数1 = (tt.Length + 1L) >> 1; // 1:1 2:1 3:2
		var 偶数1 = ((long)tt.Length) >> 1; // 1:0 2:1 3:1 4:2
		var 奇数2 = 0L;
		var 偶数2 = 0L;

		for (var i = pos; i >= 0; i--) {
			var a = t[i] - '0';

			if (a == '0') {
				x += 奇数1 + 奇数2;
			}

			if ((i & 1) != 0) { // 偶数
				var te = 奇数2;
				奇数2 = 偶数2;
				偶数2 = te + a;
				奇数1 -= a;
			} else {    // 奇数
				var te = 奇数2;
				奇数2 = 偶数2 + a;
				偶数2 = te;
				偶数1 -= a;
			}
		}

		Console.WriteLine(x);
	}

	/// <summary>最大公約数</summary>
	long gcd(long a, long b) => (a == 0) ? b : gcd(b % a, a);

	#region Console.Read 関係
	long[] ReadLongArray() => Array.ConvertAll(Console.ReadLine().Split(), long.Parse);
	long ReadLong() => long.Parse(Console.ReadLine());
	#endregion
}