const rl = require("readline").createInterface({
    input: process.stdin,
    output: process.stdout,
});

var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

// 判断ip是否合法
function ipValid(ip) {
    // 可进一步优化
    const reg = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
    return reg.test(ip);
}

// 判断子网掩码是否合法
function checkSubnetMask(ip) {
    let isValid = true;
    let checkArr = ip.split(".");
    let subnetStr = "";
    checkArr.forEach((item) => {
        // 将对应的ip转成2进制数据
        subnetStr += (Number(item) + 256).toString(2).substring(1);
    });
	// 包含 01 的属于异常
    if (subnetStr.indexOf("01") > -1) {
        isValid = false;
    } else if (subnetStr.indexOf("1") == -1 || subnetStr.indexOf("0") == -1) {
		// 全为1或全为0 异常
        isValid = false;
    }
    return isValid;
}

void (async function () {
    let dataArr = [];
    const ipObj = {
        ipA: 0,
        ipB: 0,
        ipC: 0,
        ipD: 0,
        ipE: 0,
        ipMaskErr: 0,
        ipPrivate: 0,
    };
    while ((line = await readline())) {
		// 循环获取数据
        dataArr.shift();
        dataArr.push(line.split("~"));
        dataArr.forEach((item) => {
            // item[0] -> ip  item[1] -> mask
            const first = Number(item[0].split(".")[0]);
            const second = Number(item[0].split(".")[1]);
			// 处理边界情况
            if (first == 0 || first == 127) {
            } else if (!checkSubnetMask(item[1]) || !ipValid(item[0])) {
                ipObj.ipMaskErr++;
            } else {
                // 私网ip需要第二位
                if (
                    first == 10 ||
                    (first == 172 && second <= 31 && second >= 16) ||
                    (first == 192 && second == 168)
                ) {
                    ipObj.ipPrivate++;
                }

                if (first <= 126 && first >= 1) {
                    ipObj.ipA++;
                } else if (first <= 191 && first >= 128) {
                    ipObj.ipB++;
                } else if (first <= 223 && first >= 192) {
                    ipObj.ipC++;
                } else if (first <= 239 && first >= 224) {
                    ipObj.ipD++;
                } else if (first <= 255 && first >= 240) {
                    ipObj.ipE++;
                }
            }
        });
    }
    console.log(
        ipObj.ipA +
            " " +
            ipObj.ipB +
            " " +
            ipObj.ipC +
            " " +
            ipObj.ipD +
            " " +
            ipObj.ipE +
            " " +
            ipObj.ipMaskErr +
            " " +
            ipObj.ipPrivate
    );
})();