Problem 30 complete