A modern approach to discrete structures. (2018)