Exercise 3.28
Exercise 3.29 ~ 3.30