# 判断子网掩码是否正确
def check_mask(l_mask):
    if l_mask.count("255") == 4 or l_mask.count("0") == 4:  # 二进制下全是1或者全是0均为非法子网掩码
        return False
    # 子网掩码为二进制下前面是连续的1,然后全是0
    s = ""
    for i in l_mask:
        t = bin(int(i))[2:].zfill(8)
        s += t
    # print(s)
    index_0 = s.index("0")
    if len((s[:index_0])) != s[:index_0].count("1"):
        return False
    if len((s[index_0:])) != s[index_0:].count("0"):
        return False
    return True


# 判断ip地址是否正确
def check_ip(l_ip):
    if "" in l_ip:  # ip地址里面不能有空地址
        return False
    if len((l_ip)) != 4:  # ip地址的长度必须是4
        return False
    for i in l_ip:
        if int(i) < 0 or int(i) > 255:  # ip地址里面的每一项数字范围必须是1~255
            return False
    return True  #  如果以上3种情况都没有出现,就说明它是一个合法的ip地址


# 判断是否是ABCDE类地址
def check_type(l_ip):
    num = int(l_ip[0])
    if 1 <= num and num <= 126:
        return "A"
    if 128 <= num and num <= 191:
        return "B"
    if 192 <= num and num <= 223:
        return "C"
    if 224 <= num and num <= 239:
        return "D"
    if 240 <= num and num <= 255:
        return "E"


# 判断私有
def check_private(l_ip):
    num0 = int(ip[0])
    num1 = int(ip[1])
    if num0 == 10:
        return True
    if num0 == 172:
        if 16 < num1 and num1 < 31:
            return True
    if num0 == 192 and num1 == 168:
        return True
    return False


d = {"A": 0, "B": 0, "C": 0, "D": 0, "E": 0, "ERROR": 0, "PRIVATE": 0}
while True:
    try:
        ip, mask = input().split("~")
        ip = ip.split(".")
        mask = mask.split(".")
        # print(ip,mask)
        if (
            ip[0] == "0" or ip[0] == "127"
        ):  # 1. 类似于【0.*.*.*】和【127.*.*.*】的IP地址不属于上述输入的任意一类,也不属于不合法ip地址,计数时请忽略
            continue
        if check_ip(ip) and check_mask(mask):
            if check_private(ip):
                d["PRIVATE"] += 1
            if check_type(ip):
                d[check_type(ip)] += 1
        else:
            d["ERROR"] += 1

    except:
        break
for i in d.values():
    print(i, end=" ")