By "flipped", do you mean that when control=0, c=a and d=b, and when control=1, c=b and d=a? If so, I would suggest that you start by figuring out the c output in terms of control, a, and b. Then compute the d output similarly, but with the roles of the a and b inputs switched.
A conventional approach for computing c based on a and b would use one "or" gate, two "and" gates, and an inverter; a precisely equivalent circuit would use three "nand" gates and an inverter. The inverter computes the same signal when computing c as when computing d, and could thus serve both roles (so the total for computing both c and d would be six "nand" gates and one inverter).
An alternative approach would use three "xor" gates and one "and" gate. That requires fewer gates total, but the "xor" gates are generally twice as expensive in silicon as "nand" gates, so it's not really much of a "win".