critical problem solving skills