/* Pratik Gajjar */ #include using namespace std; /* #include #include using namespace __gnu_pbds; template using ordered_set = tree, rb_tree_tag, tree_order_statistics_node_update>; //ordered_set < int > rbtree; //int i = *rbtree.find_by_order(2) //int j = rbtree.order_of_key(2) */ typedef long long ll; typedef long double ld; typedef vector vl; typedef pair pl; typedef vector vpl; typedef set setl; typedef map msl; typedef map ml; typedef unordered_map uml ; #define sortv(x) sort(x.begin(),x.end()) #define all(v) v.begin() , v.end() #define UNIQUE(c) (c).resize(unique(all(c)) - (c).begin()) #define binarysearch(v, n) binary_search(all(v),n) #define rev(v) reverse(all(v)) #define pb push_back #define MP make_pair #define F first #define S second #define fa(i, a, b) for (ll i = a ; i < b ; i++) #define f(i,b) for (ll i = 0 ; i < b ; i++) #define fv(x , it , c ) for (x ::iterator it = (c).begin(); it != (c).end(); it++) #define what_is(x) cerr << #x << " = " << x << endl; const ll INF = LONG_MAX-SHRT_MAX ; const ll MINF = LLONG_MIN; const ll mod = 1000000007; const ll N = 1000010; const ld PI = 2 * acos(0.0) ; 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; ll x = power(a, b / 2, m); x = mul(x, x, m); return b&1 == 1 ? mul(x, a, m) : x;} int pos[4] = {0}; int fun(string ro , string co){ f( i , ro.size()){ f(j , co.size()){ if(ro[i] == co[j]){ return 0 ; } } } return 1 ; } int main() { cout << fixed <> n ; string s ; cin >> s ; ll cnt = 0 ; cnt = fun(s,numbers) + fun(s , lower_case) + fun(s,upper_case); cnt += fun(s , special_characters); if(s.size() >=6 ){ cout << cnt << "\n"; }else{ ll b = 6 - n ; if( b >= cnt) { cout << b << "\n"; }else{ cout << cnt << "\n"; } } return 0; }