Data Abstraction and Problem Solving with Java: Walls and Mirrors (3rd Edition)