With answers to exercises