Combinatorial Algorithms: Generation, Enumeration, and Search (Discrete Mathematics and Its Applications)