https://courses.grainger.illinois.edu/ece391/sp2025/secure/mp3sp25cp2r1.pdf