#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 check(vi LIS, vi subsequence, int i, int n, int debug){ vi curr; int maxSize = LIS.size(); rep(j, i+1, n){ curr = LIS; if(curr.back() < subsequence[j]){ curr.pb(subsequence[j]); int currSize = curr.size(); maxSize = max(maxSize, max(currSize, check(curr, subsequence, j, n, debug+1))); } } return maxSize; } 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); } int maxSize = 1; rep(i,0,n-1){ vi LIS; LIS.pb(subsequence[i]); maxSize = max(maxSize, check(LIS, subsequence, i, n, 1)); } cout << maxSize; }