https://courses.grainger.illinois.edu/ece524/sp2021/chainiac_prez.pdf