Discrete Mathematics: An Open Introduction, 3rd edition
This book seems truly well written. Even though the material is familiar to me, I liked the chapter on generating functions for its stepwise treatment. The online exercises are wonderful too.