105 sped up dramatically with techniques from 103
solved 164