Princeton Algorithms1 by Robert Sedgewick