Introduction to Problem Solving and Programming