private boolean actualSolve(int row, int column){
		if (row == 9) {
            row = 0;
            if (++column == 9)
                return true;
        }
        if (board[row][column] != 0)  // skip filled cells
            return actualSolve(row+1,column);

        for (int val = 1; val <= 9; ++val) {
            if (validInRow(row, val) && validInCol(column, val) && validInBlock(row, column, val)) {
				//System.out.print("[" + row + "," + column + "]=" + val + "   ");
                board[row][column] = val;
                if (actualSolve(row+1,column))
                    return true;
            }
        }
        board[row][column] = 0; // reset on backtrack
        return false;
	}//end actualSolve