created a pedagogical solver to make life easy to implement new changes to the algo
without changing the optimized solvers