OIG XIV - min

// https://szkopul.edu.pl/problemset/problem/xB0uOrHG0vxqYqG2Y-Nhjlzu/site/?key=statement

#include <iostream>
#include <vector>

constexpr int sizik = 1000 * 1001;

int group[sizik];
bool skip[sizik];

int convert(bool flag) {
    return flag ? '+' : '-';
}

int main() {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    std::string s;
    std::cin >> s;

    s += "?";

    int i = 0, group_num = 1;

    while (i < s.size()) {
        if (s[i] == '+') {
            int count = 1;

            while (s[i + 1] == '+') {
                i++;
                count++;
            }

            group[group_num] += count;
        } else if (s[i] == '-') {
            int count = 1;

            while (s[i + 1] == '-') {
                i++;
                count++;
            }

            if (count % 2 == 0) {
                group[group_num] += count / 2;
            } else {
                group[++group_num] = count / 2;
                skip[group_num] = true;
                group_num++;
            }
        }
        i++;
    }

    int ans = 0;

    for (int i = 1; i <= group_num; i++) {
        if (skip[i]) {
            continue;
        } else {
            ans = std::max(ans, group[i - 1] + group[i] + group[i + 1]);
        }
    }

    std::cout << ans << '\n';

    return 0;
}