#include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; void chmax(int& a, int b) { a = max(a, b); } int main() { int inf = (int)1e9; int N;cin >> N; string S;cin >> S; int K = 20; vector> dp(K + 1, vector(2, -inf)); dp[0][0] = 0; for (int i = 0;i < N;i++) { vector> ndp(K + 1, vector(2, -inf)); vector nxt; if (S[i] == '?') { nxt = {-1, 1}; } else if (S[i] == '+') { nxt = {1}; } else { nxt = {-1}; } for (int j = 0;j <= K;j++) { if (dp[j][0] >= 0) { //not take for (auto c : nxt) { chmax(ndp[j][0], dp[j][0] + c); } //take if (j+1 <= K) { for (auto c : nxt) { chmax(ndp[j + 1][1], dp[j][0] + ((-1) * c)); } } } if (dp[j][1] >= 0) { for (auto c : nxt) { //use chmax(ndp[j][1], dp[j][1] + ((-1) * c)); // not use chmax(ndp[j][0], dp[j][1] + c); } } } swap(dp, ndp); } int res = inf; for (int k = 0;k <= K;k++) for (int f = 0;f < 2;f++) { if (dp[k][f] >= 0) res = min(res, k); } cout << res << endl; }