added exercise 2.54 & 2.46~2.58, and 2.58 hasn't finished yet