public void handle(char[] data){
		int i, j, k, r, sum;
		for(i = 0; i < 81; i++)
			res[i] = data[i];
		for(i = 0; i < 9; i++){
			hintsAtCloumn[i] = 0;
			for(j = 0; j < 9; j++){
				if(data[j*9 + i] != '.')
					hintsAtCloumn[i]++;
			}
		}
		solver.load(res);
		solver.dfs(0);
		sum = 0;
		for(i = 0; i < 9; i++){
			k = 0;
			for(j = 0; j < 9; j++){
				if(data[i * 9 + j] != '.'){
					k++;
				}
			}
			while(k < LowerBound) {
//				do r = MWC.random() >> 9 & 15; while(r > 8 || data[i * 9 + r] != '.');
				int minColumn = 0, minCells;
				minCells = 9;
				for(int m = 0; m < 9; m++){
					if(data[i * 9 + m] == '.' && hintsAtCloumn[m] < minCells){
						minCells = hintsAtCloumn[m];
						minColumn = m;
					}
				}
				data[i * 9 + minColumn] = res[i * 9 + minColumn];
				hintsAtCloumn[minColumn]++;
				k++;
			}
			sum += k;
		}
		if(sum > Total_UperBound){
			isInvalid = true;
			return;
		}
		isInvalid = false;
		k = random.nextInt(Total_UperBound - Total);
		for(; sum < Total + k; sum++){
			do r = MWC.random() >> 8 & 127; while(r > 80 || data[r] != '.');
			data[r] = res[r];
		}
		System.out.println("" + sum);
	}