Exercise 3.56 ~ 3.59