Design ALU with 2 Select lines, 2 Inputs ( n bits )
Have you heard of an n-bit multiplexer? Compute all the functions independently in parallel (with combinatorial logic), and pass the outputs through a multiplexer with the output chosen by the select lines. Multiplexers are a convenient tool for "logical superposition" (no idea if that's a real term, I just made it up).

The way to come up with an optimized solution is to first construct a datapath that can efficiently generate and combine all the intermediate values your problem statement identifies. Then do some logic reduction to generate the various control signals to that datapath as a function of your high level control inputs (S1, S0).