UNDERSTANDING DISCRETE MATHEMATICS WITH APPLICATIONS IN COMPUTER SCIENCE