@Override
  public PuzzleStateAndGenerator generateRandomMoves(Random r) {
    TwoByTwoState state = twoSolver.randomState(r);
    String scramble = twoSolver.generateExactly(state, TWO_BY_TWO_MIN_SCRAMBLE_LENGTH);

    AlgorithmBuilder ab = new AlgorithmBuilder(this, MergingMode.CANONICALIZE_MOVES);
    try {
      ab.appendAlgorithm(scramble);
    } catch (InvalidMoveException e) {
      azzert(false, new InvalidScrambleException(scramble, e));
    }
    return ab.getStateAndGenerator();
  }
 protected String solveIn(PuzzleState ps, int n) {
   CubeState cs = (CubeState) ps;
   String solution = twoSolver.solveIn(cs.toTwoByTwoState(), n);
   return solution;
 }