Discrete Mathematics For Computing by Peter Grossman