Source: https://ocw.mit.edu/courses/6-087-practical-programming-in-c-january-iap-2010/63515d4218cf01ba460623cbe9dc3b5c_MIT6_087IAP10_assn02_sol.pdf