Princeton Algorithms, Part I