#include using namespace std; #define ll long long #define ull unsigned long long #define si(X) scanf("%d", &(X)) #define sll(X) scanf("%lld",&(X)) #define INFL 0x3f3f3f3f3f3f3f3fLL const int mod = 1e9 + 7; //--------------------------------------------------------------------------------// ll gcd(ll a,ll b){if(b==0)return a;return gcd(b,a%b);} ll expo(ll base,ll pow){ll ans = 1; while(pow!=0){if(pow&1==1){ans = ans*base;ans = ans%mod;} base *= base;base%=mod;pow/=2;}return ans;} ll inv(ll x){return expo(x,mod-2);} ll mult_mod(ll a , ll b){a = a%mod; b = b%mod;ll c = (a * b)%mod;return c;} ll add_mod(ll a , ll b){a = (a + 100*1LL*mod)%mod;b = (b + 100*1LL*mod)%mod;ll c = (a + b)%mod;return c;} ll fac[(int)(1e3 + 5)] , inv_fac[(int)(1e3 + 5)]; void precomp_factorial(int M){fac[0] = 1;for(int i = 1 ; i <= M ; i++) fac[i] = mult_mod(i , fac[i - 1]); inv_fac[M] = inv(fac[M]);for(int i = M - 1 ; i >= 0 ; i--) inv_fac[i] = mult_mod(i + 1 , inv_fac[i + 1]);} ll nCk(ll n , ll k){ll ans = fac[n];ans = mult_mod(ans , inv_fac[n - k]);ans = mult_mod(ans , inv_fac[k]);return ans;} int lo[(int)(1e3 + 6)]; void sieve(int M){for(int i = 2 ; i < M ; i++){ if(lo[i]) continue; for(int j = i ; j < M ; j += i)lo[j] = i;}} int max_expo_prime_n_fac(ll N , int prime){int ress = 0;while(N){ress += (N/prime);N /= prime;}return ress;} //--------------------------------------------------------------------------------// //--------------------------------------------------------------------------------// string get_prefix(string x , int MAX){return x.substr(0 , min((int)x.size() , MAX));} string get_suffix(string x,int MAX){int dn=1;for(int i=x.size()-1;i>=0;i--){if(dn==MAX)return x.substr(i);dn++;}return x;} string convert_to_binary(int x,int len) {string ans=""; while(x){if(x&1){ans='1'+ans;} else{ans ='0'+ans;}x/=2;}int k = ans.size();while(k < len){ans = '0' + ans;k++;}return ans;} //--------------------------------------------------------------------------------// ull llrand() {ull r = 0;for(int i = 0; i < 5; ++i){r = (r << 15)|(rand() & 0x7FFF);}return r & 0xFFFFFFFFFFFFFFFFULL;} int dx[8] = {1 , 0 , -1 , 0 , 1 , -1 , -1 , 1}; // last 4 diagonal int dy[8] = {0 , 1 , 0 , -1 , 1 , 1 , -1 , -1}; /*---------------------------------------------------------------------------------------------------------------------*/ const int M = 1e5 + 5; int main(){ int n; si(n); string str; cin >> str; int upp = 0 , loww = 0 , digg = 0 , sp = 0; string spp = "!@#$%^&*()-+"; set ss; for(int i = 0 ; i < spp.size() ; i++){ ss.insert(spp[i]); } for(int i = 0 ; i < n ; i++){ if(str[i] >= 'A' && str[i] <= 'Z'){ upp = 1; } if(str[i] >= 'a' && str[i] <= 'z'){ loww = 1; } if(str[i] - '0' >= 0 && str[i] - '0' <= 9){ digg = 1; } if(ss.count(str[i])){ sp = 1; } } int ans= 0; ans += (upp == 0); ans += (loww == 0); ans += (digg == 0); ans += (sp == 0); int fin = n + ans; ans += max(0 , 6 - fin); cout<