const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
/**
* 判断ip合法性
*/
function valid(ip) {
// 分割成数组
const arr = ip.split(".").filter((item) => item !== "");
// 如果长度小于4,则不合法
if (arr.length < 4) return false;
// 如果数字为空或者不在0到255间,则不合法
return arr.every((item) => +item >= 0 && +item <= 255);
}
function ipToNum(ip) {
let sum = 0;
const ipArr = ip.split(".").reverse();
for (let i = 0; i < ipArr.length; i++) {
sum += +ipArr[i] * 255 ** i;
}
return sum;
}
/**
* ip分类统计
*/
function sumIp(ip) {
const ipArr = ip.split(".");
if (+ipArr[0] === 0 || +ipArr[0] === 127) return;
// ip转换成数字
const ipNum = ipToNum(ip);
// ip分类统计
if (ipToNum("1.0.0.0") <= ipNum && ipNum <= ipToNum("127.255.255.255")) {
contArr[0]++;
} else if (
ipToNum("128.0.0.0") <= ipNum &&
ipNum <= ipToNum("191.255.255.255")
) {
contArr[1]++;
} else if (
ipToNum("192.0.0.0") <= ipNum &&
ipNum <= ipToNum("223.255.255.255")
) {
contArr[2]++;
} else if (
ipToNum("224.0.0.0") <= ipNum &&
ipNum <= ipToNum("239.255.255.255")
) {
contArr[3]++;
} else {
contArr[4]++;
}
// 私有地址统计
if (
(ipToNum("10.0.0.0") <= ipNum && ipNum <= ipToNum("10.255.255.255")) ||
(ipToNum("172.16.0.0") <= ipNum &&
ipNum <= ipToNum("172.31.255.255")) ||
(ipToNum("192.168.0.0") <= ipNum && ipNum <= ipToNum("192.168.255.255"))
) {
contArr[6]++;
}
}
function ipToBety(ip) {
let str = "";
const ipArr = ip.split(".");
for (let i = 0; i < ipArr.length; i++) {
str += Number(ipArr[i]).toString(2).padStart(8, "0");
}
return str;
}
/**
* 统计错误子网掩码
*/
function validErrZwym(zwym) {
const zwymArr = zwym.split(".").filter((item) => item !== "");
if (zwymArr.length < 4) return false;
if (!zwymArr.every((item) => +item >= 0 && +item <= 255)) return false;
const ipBety = ipToBety(zwym);
if (/01/.test(ipBety) || !ipBety.includes("1") || !ipBety.includes("0"))
return false;
return true;
}
const contArr = [0, 0, 0, 0, 0, 0, 0];
void (async function () {
// Write your code here
while ((line = await readline())) {
const arr = line.split("~");
const ip = arr[0];
const zwym = arr[1];
if (!valid(ip) || !validErrZwym(zwym)) {
const ipArr = ip.split(".");
if (+ipArr[0] === 0 || +ipArr[0] === 127) continue;
contArr[5]++;
continue;
}
sumIp(ip);
}
console.log(contArr.join(" "));
})();