finished exercise 2.67~2.72