use list instead of arraylist
add todo for IllegalUserInputException to specify exception reason
use list instead of arraylist in map