# 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=" ")