added exercise 2.44~2.49(c)