add exercise 3.23. 3.16 3.17 not completed