refactored solution to problem 16