#include #include #include #include #include #include #include #define WATCH(x) std::cout << (#x) << ": " << x << '\n'; #define xx(container, lambda) container.begin(), container.end(), lambda using tt = std::vector; struct Pair { size_t index; bool token; }; Pair check(const tt& in, int start) { size_t end = start; bool token = in[start]; bool prev = token; for (size_t i = start + 1; i < in.size(); i++) { if (in[i] == prev) { break; } prev = in[i]; end = i; } token = prev; return {end, token}; } void reverse(tt& in,size_t start, size_t end){ std::reverse(in.begin() + start, in.begin() + end); } void print(tt& in){ for(auto c: in) std::cout << (c?'+':'-'); std::cout << std::endl; } size_t solve(tt in) { size_t operations = 0; size_t start = 0; while(start <= in.size()-1) { auto p = check(in, start); start = p.index; //WATCH(p.index) auto next = check(in,p.index+1); //WATCH(next.index) if(next.index == in.size()) { break; } reverse(in, p.index +1, next.index +1 ); start = next.index; ++operations; } // print(in); return operations; } int main() { std::string input; std::cin >> input; std::vector in(input.size()); for (int i = 0; i < input.size(); i++) { in[i] = input[i] == '+'; } //WATCH(in.size()) std::cout << solve(in) << '\n'; return 0; }