implements Solver