= Part 1: LockCo Combination Lock Classic LockCo sells a lock called the Combination Lock Classic, where each lock has N buttons numbered 1 through N. The locks are offered with N chosen from the range 1 to 8. Each lock uses a combination of button pushes to unlock it. A valid combination is a sequence of button pushes with each button used at most one time, and each button is pressed by itself. Not all buttons need to be used in each valid combination. Write a program that generates all of the valid combinations for a Classic lock with N buttons, where N is provided as the first command line argument. The combinations must be generated to standard output. Each combination must appear on its own line, and each combination must be output only once. A combination is output as the button numbers in the order as they are pressed, with each press separated by a space. The order in which the combinations are output is not important. Only values of N up to 8 will be used. As an example, the only valid combination for N = 1 is: 1 And the valid combinations for N = 2 are: 1 2 1 2 2 1 While performance is important, it is imperative that the code be clear and maintainable. Please use only a single source file for the solution. = Part 2: LockCo Combination Lock Plus After having great success selling their Classic locks, customers have requested a lock that has more combinations than the Clasic and is thus harder to crack. To address this they have come up with a new lock, the Combination Lock Plus. The Plus is very similar to the Classic, except that two buttons may be pressed simultaneously. As an example, with a 3-button lock, the buttons 1 and 2 could be pressed simultaneously in a combination, followed by the 3 being pressed by itself. Update the combination generating program for the Classic to also support the Plus. If a second command line argument is present, generate combinations for the Plus; if there is no second command line argument, generate combinations for the Classic. Two buttons pressed simultaneously are output as S-T, with S < T (i.e. 1-2 is a valid two-button press but 2-1 is not). As an example, the valid combinations for a Plus lock with N = 2 are: 1 2 1 2 2 1 1-2 While performance is important, it is imperative that the code be clear and maintainable. Please use only a single source file for the solution.