better solution to problem 9