'''

```
class Solution(object):
def combinationSum2(self, candidates, target):
combis = []
candidates.sort()
todo = [(target, 0, [])]
while todo:
rest, i, combi = todo.pop()
if rest == 0:
combis.append(combi)
if i < len(candidates) and rest < candidates[i]:
continue
already = {}
while i < len(candidates) and rest >= candidates[i]:
if candidates[i] not in already:
already[candidates[i]] = 1
todo.append((rest-candidates[i], i+1, combi+[candidates[i]]))
i += 1
return combis
```

'''