Basic Principles of Problem Solving