exercise 2.12.