Source: https://www.epfl.ch/labs/disopt/wp-content/uploads/2019/10/solutions2.pdf