public List<List<Integer>> dfs(List<List<Integer>> result,
			List<Integer> line, int[] num, int index, int target) {
		if (target == 0) {
			result.add(line);
			return result;
		}
		if (index >= num.length || num[index] > target)
			return result;
		

		for (int i = index; i < num.length; i++) {
			if (i > index && num[i] == num[i - 1])
				continue;
			List<Integer> newLine = new ArrayList<Integer>(line);
			newLine.add(num[i]);
			result = dfs(result, newLine, num, i + 1, target - num[i]);
		}
		return result;
	}