Practical Discrete Mathematics