Data Structures and Algorithm Analysis in Java (2nd Edition)