Flexibility in problem solving: analysis and improvement