solve #27
#27のcoffeeによる回答を追加
#27のコードをちょっと整理