def contributor_list(args: argparse.Namespace) -> None:
    if args.list is None:
        raise ValueError("list flag should be set")

    first = args.list[0]
    last = args.list[1]
    if first >= last:
        raise ValueError("`first` should be less than `last`")

    repo = construct_repo(args)
    milestones = repo.get_milestones(state="all", sort="due_on")
    versions = {f"v{i}" for i in range(first, last + 1)}
    contributors = set()
    for milestone in milestones:
        if milestone.title in versions:
            milestone_contributors = collect_contributors(repo, milestone)
            print(f"Milestone {milestone.title}: {len(milestone_contributors)} external contributors")
            contributors.update(milestone_contributors)

    print()
    for c in sorted(contributors):
        print(c)