Introduction to discrete structures for computer science and engineering (Addison-Wesley series in computer science and information processing)