This list is intended to contain a wide range of problems requiring a high level of ingenuity. It encompasses most of the problems I teach my students to help them develop their thinking when it comes to problem solving in competitive programming: