added exercise 3.16~3.19