Source: https://www.cs.umd.edu/class/fall2014/cmsc250-0101/restricted/hw02-sol.pdf