Discrete Mathematical Structures With Applications To Computer Science