public boolean solve() {
		Util.dprint("Solving process started");
		Util.dprint("Starting grid:");
		sudoku.print();

		// Sure hits
		solveSure(sudoku);
		if (sudoku.validateField()) {
			Util.dprint("Got it in one go! Result:");
			sudoku.print();
			return true;
		}
		
		// List possible options for remaining slots
		Util.dprint("We are out of sure hits.");
		sudoku.print();
		Util.dprint("Number of missing fields: " + Util.countEmptySlots(sudoku));
		Util.printMaybe(maybe);
		
		// Start guessing the remaining slots
		Util.dprint("Going to guess");
		int pass = 0;
		while (!sudoku.validateField() && pass < 1) { //1 increase the pass count
			solveGuess();
			Util.printMaybe(maybe);
			pass++;
		}

		Util.dprint("Number of Missing Fields: " + Util.countEmptySlots(sudoku));
		Util.dprint("Final product:");
		sudoku.print();
		return sudoku.validateField();
	}