public DSolve(Puzzle solving){
	    int row = 0;
	    int column = 0;
	    int value =0;
	    boolean done = false;
	    boolean failed = false;
	    int counter = 0;
	   
	    //This part of the method goes through each of the puzzle's 81 squares (at worst) 81 times and applies the class's methods each time.
	    //The function breaks (via while loop condition) after 81 repeats (to prevent a useless infinite loop) or if all 81 squares have a value (indicating it is done).
	    while (done != true && failed != true) 
	    {  
	    	//Traverses the entire puzzle by going through each row (0-8) then incrementing the column and resetting row back to 0.
	    	while (column != 9) 
	    	{  
	    		while (row != 9) 
	    		{
	    			//Prepares to run the setImpossible method. Will only run it for appropiate squares (squares we have not checked yet).
	    			if (solving.getValueAtPosition(column,row) != 0 && solving.getPosition(column,row).getListSize() !=0)
	    			{
	    				value = solving.getValueAtPosition(column,row);
	    				setImpossible(solving,column,row,value);
	    			}
	    			//Runs the two solver methods whilst also incrementing across the row for the next square.
	    			setValueSingleElement(solving);
	    			setValueSpecialCases(solving);
	    			row++;
	    		} 
	    		//Increments the column and resets the row so it can go through the row for the next column.
	    		row = 0;
	    		column++;
	    	}
	    	//Resets parameters except for counter and proceeds to go through it again.
	    	row = 0;
	    	column = 0;
	    	counter++;
	    	
	    	//The infinite loop failsafe.
	    	if (counter == 81) {
	    		failed = true;
	    	}
	    	
	    	//Calls the filled function to see if we have got a value for all 81 squares.
	    	done = filled(solving);
	    }
	    
	}