public boolean dfs(int k){
		if(k > 325) return true;
		int s = Integer.MAX_VALUE, c = 0;
		for(int t = R[Head]; t != Head; t = R[t]){
			if(S[t] < s){
				s = S[t];
				c = t;
			}
		}
		if(c == 0) return true;
		remove(c);
		for(int i = D[c]; i != c; i = D[i]){
			int t = (i - 325) / 4;
			oridata[t / 9] = (char)(t % 9 + '1');
			for(int j = R[i]; j != i; j = R[j]){
				remove(C[j]);
			}
			if(dfs(k + 1))
				return true;
			for(int j = L[i]; j != i; j = L[j]){
				resume(C[j]);
			}
		}
		resume(c);
		return false;
	}