Source: https://www.ics.uci.edu/~goodrich/teach/cs162/hw/HW1Sols.pdf