const readline = require("readline");

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

const validNetNumber = [];
let i = 7;

while (i >= 0) {
  let j = 7;
  let sum = 0;
  while (j >= 0) {
    if (j >= i) {
      sum += Math.pow(2, j);
    }
    j--;
  }
  validNetNumber.push(sum + "");
  i--;
}

const isValidSubnet = (subnet) => {
  let flag = true;
  let countType1 = 0;
  let countType2 = 0;
  const nets = subnet.split(".");
  let hasSpcial = false;
  let specialIndexs = [];
  nets.forEach((net, index) => {
    if (net === "255") {
      countType1++;
    } else if (net === "0") {
      countType2++;
    } else if (validNetNumber.includes(net)) {
      hasSpcial = true;
      specialIndexs.push(index);
    } else {
      flag = false;
    }
  });
  if (specialIndexs.length > 1) {
    flag = false;
  }
  // 二进制下全是1或者全是0均为非法子网掩码
  if (countType1 === 4 || countType2 === 4) {
    flag = false;
  }
  if (hasSpcial && specialIndexs.length === 1 && flag) {
    let specialIndex = specialIndexs[0];
    let indexAfter = specialIndex;
    let indexBefore = specialIndex;
    indexAfter++;
    indexBefore--;
    while (indexAfter <= 3) {
      if (nets[indexAfter] !== "0") {
        flag = false;
      }
      indexAfter++;
    }
    while (indexBefore >= 0) {
      if (nets[indexBefore] !== "255") {
        flag = false;
      }
      indexBefore--;
    }
  }
  return flag;
};

let ipA = 0;
let ipB = 0;
let ipC = 0;
let ipD = 0;
let ipE = 0;
let ipFault = 0;
let ipPrivate = 0;

const subnets = [];
const faultIps = [];

let setTimeoutId;
const callback = () => {
  console.log(
    ipA +
      " " +
      ipB +
      " " +
      ipC +
      " " +
      ipD +
      " " +
      ipE +
      " " +
      ipFault +
      " " +
      ipPrivate
  );
  // test-8
    // if (ipA === 50) {
    //   console.log("subnets:", subnets);
    //   console.log("faultIps:", faultIps);
    // }
};

rl.on("line", function (line) {
  if (setTimeoutId) {
    clearTimeout(setTimeoutId);
  }
  const tokens = line.split("~");

  const ipArray = tokens[0].split(".");
  // 过滤首个ip段值为0或127的数据
  if (["0", "127"].includes(ipArray[0])) {
    setTimeoutId = setTimeout(callback, 0);
    return;
  }

  // ip地址非法
  if (ipArray.some((item) => item === "")) {
    faultIps.push(ipArray);
    ipFault++;
    setTimeoutId = setTimeout(callback, 0);
    return;
  }

  const subnet = tokens[1];
  // 子网掩码非法
  if (!isValidSubnet(subnet)) {
    subnets.push(subnet);
    ipFault++;
    setTimeoutId = setTimeout(callback, 0);
    return;
  }

  const ip_1 = +ipArray[0];
  const ip_2 = +ipArray[1];

  // 是否是A|B|C|D|E类IP地址
  if (ip_1 >= 1 && ip_1 <= 126) {
    ipA++;
  } else if (ip_1 >= 128 && ip_1 <= 191) {
    ipB++;
  } else if (ip_1 >= 192 && ip_1 <= 223) {
    ipC++;
  } else if (ip_1 >= 224 && ip_1 <= 239) {
    ipD++;
  } else if (ip_1 >= 240 && ip_1 <= 255) {
    ipE++;
  }

  // 是否是私有IP地址
  if (
    ip_1 === 10 ||
    (ip_1 === 172 && ip_2 >= 16 && ip_2 <= 31) ||
    (ip_1 === 192 && ip_2 === 168)
  ) {
    ipPrivate++;
  }
  setTimeoutId = setTimeout(callback, 0);
});