https://medium.com/@monocosmo77/understanding-np-complete-concept-part2-computer-science-dd4c314c45e2