private void initDLX(){
		int i, j, k, n;
		for(i = 0; i <= 324; i++){
			L[i] = i - 1;
			R[i] = i + 1;
			U[i] = i;
			D[i] = i;
		}
		L[0] = 324;
		R[324] = 0;
		for(i = 0; i < 325; i++){
			S[i] = 0;
			wasRemoved[i] = false;
		}

		int cur = 325;
		for(i = 0; i < 9; i++)
			for(j = 0; j < 9; j++)
				for(k = 0; k < 9; k++){
					for(n = 0; n < 4; n++){
						R[cur] = cur + 1;
						L[cur] = cur - 1;
						C[cur] = condition[n].getColumn(i, j, k);
						U[cur] = U[C[cur]];
						D[cur] = C[cur];
						D[U[cur]] = cur;
						U[C[cur]] = cur;
						S[C[cur]] ++;
						cur ++;
					}
					R[cur - 1] = cur - 4;
					L[cur - 4] = cur - 1;
				}
		
		
		for(i = 0; i < 9; i++)
			for(j = 0; j < 9; j++){
				char ch = (char)oridata[i * 9 + j];
				if(ch != '.'){
					k = ch - '1';
					for(n = 0; n < 4; n++){
						int column = condition[n].getColumn(i, j, k);
						if(!wasRemoved[column]){
							remove(column);
							wasRemoved[column] = true;
						}
					}
				}
			}
	}