public Puzzle solve(Puzzle p) {
		if (p.isSolved()) {
			return p;
		}
		Guess guess = getNextGuess(p);
		if (guess == null) {
			return null;
		}
		Puzzle solution = p;
		for (int value : guess.possibles) {
			Puzzle newP = p.mutate(guess.index, value);
			solution = solve(newP);
			if (solution != null) {
				break;
			}
		}
		return solution;
	}