import sys
a,b,c,d,e,wrong,private = 0,0,0,0,0,0,0
ip_lists,subnet_mask_lists = [],[]
for line in sys.stdin:
ip,subnet_mask = line.strip().split("~")
thistime_ip_list = ip.split(".")
ip_lists.append(thistime_ip_list)
thistime_sunnet_mask_list = subnet_mask.split(".")
subnet_mask_lists.append(thistime_sunnet_mask_list)
def check_binary_subnet(subnet_list):
change_time = 0
if subnet_list[0] == 0:
return False
for i in range(1,len(subnet_list)):
if subnet_list[i] != subnet_list[i-1]:
change_time += 1
if change_time == 2:
break
if change_time == 0 or change_time == 2:
return False
else:
return True
for i in range(len(ip_lists)):
# 获取输入列表
ip = ip_lists[i]
subnet = subnet_mask_lists[i]
# if len(ip) < 4 or len(subnet) < 4:
# wrong += 1
# continue
frist_ipnum = int(ip[0])
# if ip[0].isdigit():
# frist_ipnum = int(ip[0])
# else:
# wrong += 1
# continue
# 优先判断是不是特殊情况,如果是,直接跳过
if frist_ipnum == 0 or frist_ipnum == 127:
continue
# 判断正误,示例1里,子网掩码错了,IP也不算。所以一旦错了是一起的
is_wrong = False
binary_subnet = []
for i in range(4):
# 先处理ip地址
this_part_ip = ip[i]
# if not this_part_ip.isdigit():
# is_wrong = True
# break
# else:
num = int(ip[i])
if num<0 or num >=255:
is_wrong = True
break
# 再看字码掩码
# if not subnet[i].isdigit():
# is_wrong = True
# break
# else:
num = int(subnet[i])
binary_num = bin(num)[2:]
binary_subnet.extend(binary_num.zfill(8))
if not check_binary_subnet(binary_subnet):
is_wrong = True
# 根据前面判断的正误来划分
if is_wrong:
wrong += 1
else:
if 1 <= frist_ipnum <=126:
a+=1
if frist_ipnum == 10:
private += 1
elif 128 <= frist_ipnum <= 191:
b += 1
if frist_ipnum == 172 and 16 <= int(ip[1]) <= 31:
private += 1
elif 192 <= frist_ipnum <= 223:
c += 1
if frist_ipnum == 192 and int(ip[1]) == 168:
private += 1
elif 224 <= frist_ipnum <= 239:
d += 1
elif 240 <= frist_ipnum <= 255:
e += 1
print(f"{a} {b} {c} {d} {e} {wrong} {private}")