#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 = -1; i < N; i++) { lint c = 0; if (i >= 0) c += D[i]; if (i + 1 < N) c += U[i + 1]; if ((i >= 0 && S[i] == '0') || (i + 1 < N && S[i + 1] == '0')) c++; MAX = max(MAX, c); } cout << MAX << endl; //for (auto x : U) cout << x << ' '; //*/ }