Efficient Algorithms for Listing Combinatorial Structures