https://medium.com/@arulpiruthiviraj/essential-algorithms-for-competitive-programming-a-guide-to-refresh-your-problem-solving-skills-583cbe02572f