Exercise 2.48 ~ 2.52