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