Implements a few solvers and take a first pass at a non-trivial solver.