def two_sum(nums, target):
    seen = {}
    for index, value in enumerate(nums):
        complement = target - value
        if complement in seen:
            return seen[complement], index
        seen[value] = index
    return None


def check_result(nums, target, result):
    if result is None:
        return not any(nums[i] + nums[j] == target
                       for i in range(len(nums))
                       for j in range(i + 1, len(nums)))
    i, j = result
    return 0 <= i < j < len(nums) and nums[i] + nums[j] == target


if __name__ == "__main__":
    from itertools import product
    assert two_sum([2, 7, 11, 15], 9) == (0, 1)
    assert two_sum([3, 3], 6) == (0, 1)
    assert two_sum([3], 6) is None
    assert two_sum([], 0) is None
    assert two_sum([-2, 4, 7], 5) == (0, 2)
    for length in range(5):
        for nums in product(range(-2, 3), repeat=length):
            for target in range(-4, 5):
                assert check_result(nums, target, two_sum(nums, target))
    print("Two Sum: all checks passed")
