added exercise 3.28~3.30