Combinatorial Algorithms : Generation, Enumeration, and Search