Split up the algorithm into its stages
Split guess solver into its own method