def allMissing(nums):
result = []
index = 0
while index < len(nums):
if nums[index] > 0 and not nums[index] == index+1:
nums[nums[index]-1], nums[index] = nums[index], nums[nums[index]-1]
if nums[index] == nums[nums[index]-1]:
nums[index] = -1
index += 1
else:
index += 1
for i in range(len(nums)):
if nums[i] < 0:
result.append(i+1)
return result
print(allMissing([5,2,2,1,7,3,3]))
print(allMissing([5,2,2,1,2,2,2]))
print(allMissing([1,1,1,1,1,1,7]))
print(allMissing([1,1]))
ZGVmIGFsbE1pc3NpbmcobnVtcyk6CglyZXN1bHQgPSBbXQoJaW5kZXggPSAwCgl3aGlsZSBpbmRleCA8IGxlbihudW1zKToKCQlpZiBudW1zW2luZGV4XSA+IDAgYW5kIG5vdCBudW1zW2luZGV4XSA9PSBpbmRleCsxOgoJCQludW1zW251bXNbaW5kZXhdLTFdLCBudW1zW2luZGV4XSA9IG51bXNbaW5kZXhdLCBudW1zW251bXNbaW5kZXhdLTFdCgkJCWlmIG51bXNbaW5kZXhdID09IG51bXNbbnVtc1tpbmRleF0tMV06CgkJCQludW1zW2luZGV4XSA9IC0xCgkJCQlpbmRleCArPSAxCgkJZWxzZToKCQkJaW5kZXggKz0gMQoJZm9yIGkgaW4gcmFuZ2UobGVuKG51bXMpKToKCQlpZiBudW1zW2ldIDwgMDoKCQkJcmVzdWx0LmFwcGVuZChpKzEpCglyZXR1cm4gcmVzdWx0CgpwcmludChhbGxNaXNzaW5nKFs1LDIsMiwxLDcsMywzXSkpCnByaW50KGFsbE1pc3NpbmcoWzUsMiwyLDEsMiwyLDJdKSkKcHJpbnQoYWxsTWlzc2luZyhbMSwxLDEsMSwxLDEsN10pKQpwcmludChhbGxNaXNzaW5nKFsxLDFdKSk=