···11+import fileinput
22+from utils import parse_line
33+44+MAX_IP = 2**32 - 1
55+66+77+def allowed_ips(blacklist, max_ip=MAX_IP):
88+ """Generator over all allowed IPs given a blacklist."""
99+ i = 0
1010+1111+ while i <= max_ip:
1212+ if not blacklist:
1313+ for n in range(i, max_ip + 1):
1414+ yield n
1515+1616+ return
1717+1818+ start, end = blacklist.pop(0)
1919+2020+ if i < start:
2121+ for n in range(i, start):
2222+ yield n
2323+2424+ if i <= end:
2525+ i = end + 1
2626+2727+2828+if __name__ == '__main__':
2929+ blacklist = []
3030+3131+ for line in fileinput.input():
3232+ start, end = parse_line(r'(\d+)-(\d+)', line)
3333+ blacklist.append((start, end))
3434+3535+ blacklist.sort()
3636+3737+ whitelist = list(allowed_ips(blacklist))
3838+3939+ print "Lowest-valued whitelisted IP:", whitelist[0]
4040+ print "Number of allowed addresses:", len(whitelist)