#include using namespace std; /* ショトカ登録 cin cout endl return void int double string char pair make_pair first second tuple make_tuple get sort erase swap map set insert stoi reverse to_string auto bool true false vector queue priority_queue front pop_frpnt size substr push_back pop_back push pop top if for while break continue next_permutation __builtin_popcount */ //無限 int inf = 1020304050; int64_t INF = 1020304050607080900; //モッド int64_t mod = 998244353; //all マクロ #define all(v) v.begin(), v.end() //int64_t typedef int64_t lint; int main () { //少数以下 cout << fixed << setprecision(15); lint N; cin >> N; string S; cin >> S; vector U(N, 0), D(N,0); for (lint i = 0; i < N; i++) { if (S[i] == '+') U[i]++; if (S[i] == '-') D[i]++; } for (lint i = N - 2; i >= 0; i--) U[i] += U[i + 1]; for (lint i = 0; i < N - 1; i++) D[i + 1] += D[i]; lint MAX = 0; for (lint i = 0; i < N - 1; i++) { lint c = 0; c += D[i]; c += U[i + 1]; if (S[i] == '0' || S[i + 1] == '0') c++; MAX = max(MAX, c); } cout << MAX << endl; //*/ }