def allMissing(nums):
result = []
index = 0
while index < len(nums):
if nums[index] > 0 and nums[index] != index+1:
if nums[index] == nums[nums[index]-1]:
nums[index] = -1
index += 1
else:
nums[nums[index]-1], nums[index] = nums[index], nums[nums[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,4,1,7,3,3]))
print(allMissing([5,2,1,2,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+IDAgYW5kIG51bXNbaW5kZXhdICE9IGluZGV4KzE6CgkJCWlmIG51bXNbaW5kZXhdID09IG51bXNbbnVtc1tpbmRleF0tMV06CgkJCQludW1zW2luZGV4XSA9IC0xCgkJCQlpbmRleCArPSAxCgkJCWVsc2U6CgkJCQludW1zW251bXNbaW5kZXhdLTFdLCBudW1zW2luZGV4XSA9IG51bXNbaW5kZXhdLCBudW1zW251bXNbaW5kZXhdLTFdCgkJZWxzZToKCQkJaW5kZXggKz0gMQoJZm9yIGkgaW4gcmFuZ2UobGVuKG51bXMpKToKCQlpZiBudW1zW2ldIDwgMDoKCQkJcmVzdWx0LmFwcGVuZChpKzEpCglyZXR1cm4gcmVzdWx0CgpwcmludChhbGxNaXNzaW5nKFs1LDIsNCwxLDcsMywzXSkpCnByaW50KGFsbE1pc3NpbmcoWzUsMiwxLDIsNywzLDNdKSkKcHJpbnQoYWxsTWlzc2luZyhbNSwyLDIsMSwyLDIsMl0pKQpwcmludChhbGxNaXNzaW5nKFsxLDEsMSwxLDEsMSw3XSkpCnByaW50KGFsbE1pc3NpbmcoWzEsMV0pKQ==