Source: https://ceng.eskisehir.edu.tr/emrekacmaz/bil158/Algorithms3.pdf