Final Version

extra credit included, used HashSet instead of ArrayList