puzzle-solving techniques