#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <bitset>
using namespace std;
int A = 0, B = 0, C = 0, D = 0, E = 0;
int err = 0;
int private_ip = 0;
void judge(string ip, string mask) {
// cout << ip << "\t" << mask << endl;
stringstream ss_ip(ip);
stringstream ss_mask(mask);
string token;
vector<string> ip_field;
vector<string> mask_field;
while (getline(ss_ip, token, '.')) {
// cout << token << endl;
ip_field.push_back(token);
}
while (getline(ss_mask, token, '.')) {
// cout << token << endl;
mask_field.push_back(token);
}
//如果是特殊字符串直接返回
if (ip_field[0] == "0" || ip_field[0] == "127") return;
//判断ip是否非法
bool flag = true;
if (ip_field.size() != 4) {
err++;
flag = false;
}
if (flag && mask_field.size() != 4) {
err++;
flag = false;
}
if (flag) {
for (int i = 0; i < 4; i++) {
if (ip_field[i].size() == 0 || stoi(ip_field[i]) > 255) {
err++;
flag = false;
break;
}
}
}
//判断掩码是否非法
if (flag) {
for (int i = 0; i < 4; i++) {
if (mask_field[i].size() == 0 || stoi(mask_field[i]) > 255) {
err++;
flag = false;
break;
}
}
}
if (flag == true) {
string binaryMask;
for (auto part : mask_field) {
binaryMask += bitset<8>(stoi(part)).to_string();
}
if (binaryMask.find('1') == string::npos ||
binaryMask.find('0') == string::npos) {
err++;
flag=false;
} else {
bool foundZero = false;
for (auto i : binaryMask) {
if (i == '0') foundZero = true;
else if (foundZero == true) {
err++;
flag=false;
break;
}
}
}
}
//如果ip合法,判断ip属于哪一类
if (flag) {
int first_field = stoi(ip_field[0]);
if (first_field <= 126 && first_field >= 1) A++;
else if (first_field <= 191 && first_field >= 128) B++;
else if (first_field <= 223) C++;
else if (first_field <= 239) D++;
else E++;
int second_field = stoi(ip_field[1]);
if (first_field == 10) private_ip++;
if (first_field == 172 && second_field >= 16 &&
second_field <= 31) private_ip++;
if (first_field == 192 && second_field == 168) private_ip++;
}
}
int main() {
string input;
while (getline(cin, input)) {
size_t t = input.find_first_of('~');
string ip_address = input.substr(0, t);
string subnet_mask = input.substr(t + 1, input.size() - t);
// cout<<ip_address<<" "<<subnet_mask<<endl;
//判断ip地址
judge(ip_address, subnet_mask);
}
cout << A << " " << B << " " << C << " " << D << " " << E << " " << err << " "
<< private_ip;
}