exercise 3.50
foo
exercises 3.53 & 3.54
exercise 3.55
exercise 3.56
improved 3.55 afte seeing Eli Bendersky's version