@Override protected boolean isSolution(Integer[] solutions, int k, Board input) { return input.getFreeCount() == 0; }
@Override protected void makeMove(Integer[] solutions, int k, Board input) { input.fillSquare(input.getMove()[k], solutions[k]); }
@Override protected Integer[] constructCandidates( Integer[] solutions, int k, Board input, int nCandidates) { return input.getNextCandidates(k, input); }
@Override protected void unmakeMove(Integer[] a, int k, Board input) { input.freeSquare(input.getMove()[k]); }