-module(solution). -export([main/0]). main() -> {ok, [N]} = io:fread("", "~d"), {ok, [S]} = io:fread("", "~s"), M = missing(N, S), io:format("~p", [M]), true. missing(N, S) -> {Digits, Lower, Upper, Special} = check(S), case Digits < 1 of true -> M1 = 1; false -> M1 = 0 end, case Lower < 1 of true -> M2 = M1+1; false -> M2 = M1 end, case Upper < 1 of true -> M3 = M2+1; false -> M3 = M2 end, case Special < 1 of true -> M4 = M3+1; false -> M4 = M3 end, case N < 6 of true -> max(M4, 6-N); false -> M4 end. check(S) -> Digits = 0, Lower = 0, Upper = 0, Special = 0, check(S, Digits, Lower, Upper, Special). check([], Digits, Lower, Upper, Special) -> {Digits, Lower, Upper, Special}; check([H|T], Digits, Lower, Upper, Special) when H >= $0 andalso H =< $9 -> check(T, Digits+1, Lower, Upper, Special); check([H|T], Digits, Lower, Upper, Special) when H >= $a andalso H =< $z -> check(T, Digits, Lower+1, Upper, Special); check([H|T], Digits, Lower, Upper, Special) when H >= $A andalso H =< $Z -> check(T, Digits, Lower, Upper+1, Special); check([H|T], Digits, Lower, Upper, Special) when H =:= $! orelse H =:= $@ orelse H =:= $# orelse H =:= $$ orelse H =:= $% orelse H =:= $^ orelse H =:= $& orelse H =:= $* orelse H =:= $( orelse H =:= $) orelse H =:= $- orelse H =:= $+ -> check(T, Digits, Lower, Upper, Special+1); check([_H|T], Digits, Lower, Upper, Special) -> check(T, Digits, Lower, Upper, Special).