Solutions by Ryan Thompson.