Computational Discrete Mathematics: Combinatorics and Graph Theory with Mathematica