#include using namespace std; #include // 可変引数repマクロ https://trap.jp/post/1224/ #define rep1(a) for (long long i = 0; i < (long long)a; i++) #define rep2(i, a) for (long long i = 0; i < (long long)a; i++) #define rep3(i, a, b) for (long long i = (long long)a; i <= (long long)b; i++) #define rep4(i, a, b, c) for (long long i = (long long)a; i <= (long long)b; i += (long long)c) #define overload4(a, b, c, d, e, ...) e #define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__) #define printYesNo(is_ok) puts(is_ok ? "Possible" : "Impossible") #define ALL(v) v.begin(), v.end() #define RALL(v) v.rbegin(), v.rend() #define SORT(v) sort(ALL(v)) #define RSORT(v) sort(RALL(v)) #define REVERSE(v) reverse(ALL(v)) template using pq_asc = priority_queue, greater>; template using pq_des = priority_queue; template void printlnVector(T v) { for (auto n : v) { cout << n << endl; } } template void printVector(T v) { for (auto n : v) { cout << n << " "; } cout << endl; } int main() { string S; cin >> S; vector> dumped_S; dumped_S.push_back(pair(S[0], 0)); for (auto c : S) { if (dumped_S.back().first != c) { dumped_S.push_back(pair(c, 0)); } dumped_S.back().second++; } long long ans = 0; rep(i, dumped_S.size() - 1) { if (dumped_S[i].first == '1' && dumped_S[i].second >= 2 && dumped_S[i + 1].first == '0') { long long cnt = dumped_S[i].second / 2; ans += cnt * dumped_S[i + 1].second; swap(dumped_S[i], dumped_S[i + 1]); dumped_S[i + 1].second = cnt * 2; } else if (dumped_S[i].first == '1' && dumped_S[i + 1].first == '1') { dumped_S[i + 1].second += dumped_S[i].second; dumped_S[i].second = 0; } } cout << ans << endl; return 0; }