https://medium.com/geekculture/data-structures-and-algorithms-for-laymen-and-commonfolk-part-1-b52fc0938742