#pragma region Include/Defines #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long lli; typedef vector vi; typedef vector vli; typedef pair pii; typedef pair pll; typedef vector vpii; typedef vector vpll; typedef long double ld; #define all(a) std::begin(a), std::end(a) const int INF = 0x3f3f3f3f; const lli LINF = 0x3f3f3f3f3f3f3f3f; template inline void _max(T &a, T2 b) { a = max((T)a, (T)b); } template inline void _min(T &a, T2 b) { a = min((T)a, (T)b); } #ifdef _DEBUG #define epr(...) fprintf(stderr,__VA_ARGS__) #else #define epr(...) #endif #pragma endregion const int MAX = 110; int n; char s[MAX]; string numbers = "0123456789"; string lower_case = "abcdefghijklmnopqrstuvwxyz"; string upper_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; string special_characters = "!@#$%^&*()-+"; void clear() { } void read() { scanf("%s", s); } void solve() { bool hasDigit = false, hasLower = false, hasUpper = false, hasSpecial = false; for (int i = 0; i < n; i++) { char c = s[i]; hasDigit |= numbers.find(c, 0) != string::npos; hasLower |= lower_case.find(c, 0) != string::npos; hasUpper |= upper_case.find(c, 0) != string::npos; hasSpecial |= special_characters.find(c, 0) != string::npos; } int toAdd = max(0, 6 - n); int newChar = !hasDigit + !hasLower + !hasUpper + !hasSpecial; printf("%d\n", max(toAdd, newChar)); } int main() { #ifdef _LOCAL_VAN freopen("in.txt", "r", stdin); #endif while (scanf("%d", &n) == 1) { clear(); read(); solve(); #ifndef _LOCAL_VAN return 0; #endif } return 0; }