exercise 2.68
exercises 2.69 and 70