available_ips = set()
used_ips = set()


def print_ips():

    available_ips_list = list(available_ips)
    used_ips_list = list(used_ips)

    if len(available_ips_list) > len(used_ips_list):
        for _ in range(0, len(available_ips_list) - len(used_ips_list)):
            used_ips_list.append("")
    elif len(available_ips_list) < len(used_ips_list):
        for _ in range(0, len(used_ips_list) - len(available_ips_list)):
            available_ips_list.append("")

    print()
    print("          available   used")
    print("   ----------------   -----------------")
    for available_ip, used_ip in zip(available_ips_list, used_ips_list):
        print(f"   {available_ip:>16}   {used_ip:<16}")


for index in range(180, 200):
    available_ips.add("10.0.1." + str(index))

while True:
    print_ips()
    ip_address = input("\nEnter IP address to allocate: ")
    if not ip_address:
        print("\nExiting 'sets' application")
        exit()

    if ip_address in available_ips:

        print(f"-- allocated IP address: {ip_address}")
        available_ips.remove(ip_address)
        used_ips.add(ip_address)

        print_ips()

        if len(available_ips.intersection(used_ips)) > 0:
            print("\n-- ERROR! one or more IPs in both sets")

    else:
        print("-- IP address not found in available IPs\n")