#include using namespace std; using ll = long long; using ld = long double; using pii = pair; using pll = pair; using vi = vector; #define pb push_back #define eb emplace_back #define fi first #define se second #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() #define rep(i,a,b) for(int i = (a); i < (b); i++) // g++ -std=c++20 -O2 -Wall template.cpp -o test int main(){ ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; string s; cin >> s; int loBound = INT_MIN; int pos = 1; vi subsequence; rep(i,0,n){ if(s[i] == '-'){ subsequence.pb(loBound); loBound++; } else if(s[i] == '+'){ subsequence.pb(pos); pos++; } else subsequence.pb(0); } vi dp(n); rep(k,0,n){ dp[k] = 1; rep(i,0,k){ if(subsequence[i] < subsequence[k]) dp[k] = max(dp[k], dp[i]+1); } } cout << *max_element(dp.begin(), dp.end()); }