up to problem 18