# 20240911
dic = {"A": 0, "B": 0, "C": 0, "D": 0, "E": 0, "ERROR": 0, "PRIVATE": 0}
def check_mask(mask):
if len(mask) != 4:
return False
if "" in mask:
return False
if (mask.count("0") == 4) or (mask.count("255") == 4):
return False
b4 = ""
for i in mask:
t = bin(int(i))[2:].zfill(8)
b4 += t
index_0 = b4.index("0")
if len(b4[:index_0]) != b4[:index_0].count("1"):
return False
if len(b4[index_0:]) != b4[index_0:].count("0"):
return False
return True
def check_ip(ip):
if "" in ip: # ip地址里面不能有空地址
return False
if len((ip)) != 4: # ip地址的长度必须是4
return False
for i in ip:
if int(i) < 0 or int(i) > 255: # ip地址里面的每一项数字范围必须是1~255
return False
return True # 如果以上3种情况都没有出现,就说明它是一个合法的ip地址
def check_type(ip):
n = int(ip[0])
if 1 <= n and n <= 126:
return "A"
if 128 <= n and n <= 191:
return "B"
if 192 <= n and n <= 223:
return "C"
if 224 <= n and n <= 239:
return "D"
if 240 <= n and n <= 255:
return "E"
def check_private(ip):
n1 = int(ip[0])
n2 = int(ip[1])
if n1 == 10:
return True
if n1 == 172:
if 16 <= n2 and n2 <= 31:
return True
if n1 == 192 and n2 == 168:
return True
return False
while True:
try:
ip, mask = input().split("~")
ip = ip.split(".")
mask = mask.split(".")
if ip[0] == "0" or ip[0] == "127":
continue
if check_ip(ip) and check_mask(mask):
if check_private(ip):
dic["PRIVATE"] += 1
if check_type(ip):
dic[check_type(ip)] += 1
else:
dic["ERROR"] += 1
except:
break
for i in dic.values():
print(i, end=" ")