```
def combinationSum2(self, candidates, target):
dp = [set([()])] + [set([]) for i in xrange(target)]
for c in sorted(candidates):
for n in xrange(target, c - 1, -1):
dp[n] |= {t + (c,) for t in dp[n - c]}
return [list(t) for t in dp[target]]
```