https://courses.grainger.illinois.edu/cs598brc/fa2022/hw_1.pdf