#include using namespace std; #include #include using namespace __gnu_pbds; template using ordered_set = tree, rb_tree_tag, tree_order_statistics_node_update>; typedef long long ll; typedef long double ld; typedef pair pl; typedef vector vl; #define sl(x) scanf("%d",&x) #define pl(x) printf("%d\n",x) #define sz(x) ((int)x.size()) #define s(x) sort(x.begin(),x.end()) #define all(v) v.begin(),v.end() #define debug(x) cerr << #x << " " << x << "\n"; #define debug2(x, n) cerr << #x << "\n"; f(i, n) cerr << i << " " << x[i] << "\n"; #define r(v) {reverse(all(v));} #define pb push_back #define F first #define S second #define f(i,n) for(int i=0;i T power2(T a, ll b) { if(b == 0) return 1; if(b == 1) return a; T x = power2(a, b / 2); x = x * x; if(b % 2) x = x * a; return x;} ll gcd(ll a, ll b) {if(a < b) swap(a, b); while(b) {ll t = b; b = a % b; a = t;} return a;} ll mul(ll a, ll b, ll m = mod) { return (ll)(a * b) % m;} ll add(ll a, ll b, ll m = mod) { a += b; if(a >= m) a -= m; if(a < 0) a += m; return a;} ll power(ll a, ll b, ll m = mod) { if(b == 0) return 1; if(b == 1) return (a % m); ll x = power(a, b / 2, m); x = mul(x, x, m); if(b % 2) x = mul(x, a, m); return x;} string sp = "!@#$%^&*()-+"; inline void solvet() { ll n; cin >> n; string s; cin >> s; set ss; f(j, sz(sp)) ss.insert(sp[j]); ll u = 0, di = 0, p = 0, l = 0; f(i, n) { if(s[i] >= '0' && s[i] <= '9') { di = 1; } else if(s[i] >= 'a' && s[i] <= 'z') { l = 1; } else if(s[i] >= 'A' && s[i] <= 'Z') { u = 1; } else if(ss.find(s[i]) != ss.end()) { p = 1; } } ll ans = 0; ans += 4 - u - di - p - l; ll rem = 6 - (n + ans); if(rem < 0) rem = 0; ans += rem; cout << ans << "\n"; } int main() { ios_base::sync_with_stdio(0); ll t = 1; //cin >> t; while(t--) solvet(); return 0; }