#include <iostream>
using namespace std;
int main() {
int A = 0, B = 0, C = 0, D = 0, E = 0, P = 0, wrong = 0;
string s;
while (cin >> s) {
char Ym[33];
int m = 0;// 掩码字符串指针
for (int i = 0; i < 33; ++i)
Ym[i] = '0';
int flag = 1;//1表示ip地址,2表示子网掩码
bool right = true;//合法
int address = 0;
int count = 1;
int address2 = 0;
for (int i = 0; i < s.length(); ++i) {
if (flag == 1) {
if (i == 0 && s[i] >= '0' && s[i] <= '9') {
//地址1
for (int j = i; j < s.length(); ++j) {
if (s[j] == '.') {
i = j - 1;
break;
} else address = address * 10 + s[j] - '0';
}
} else if (i == 0 && s[i] == '.') {
address = -1;
right = false;
} else if (s[i] >= '0' && s[i] <= '9' && count == 1) {
//地址2
for (int j = i; j < s.length(); ++j) {
if (s[j] == '.') {
i = j - 1;
count++;
break;
} else address2 = address2 * 10 + s[j] - '0';
}
if (address2 < 0 || address2 > 255)
right = false;
} else if (s[i] >= '0' && s[i] <= '9' && count == 2) {
//地址3.4
int temp = 0;
for (int j = i; j < s.length(); ++j) {
if (s[j] == '.' || s[j] == '~') {
i = j - 1;
break;
} else temp = temp * 10 + s[j] - '0';
}
if (temp < 0 || temp > 255)
right = false;
} else if (s[i] == '~') {
flag = 2;
} else if (s[i] == '.' && s[i + 1] == '.')
right = false;
else if (s[i] == '.' && s[i + 1] == '~')
right = false;
} else if (flag == 2) {
if (s[i] >= '0' && s[i] <= '9') {
int k;// 找到下一个.
for (k = i; k < s.length(); ++k) {
if (s[k] == '.')
break;
}
int temp = 0;
for (int l = i; l < k; ++l) {
temp = temp * 10 + s[l] - '0';
}//转为数值
if (temp < 0 || temp > 255)
right = false;
//转为字符串
if(temp == 0)
m += 8;
while (temp > 0) {
int index = 8 * (1 + m / 8) - 1 - (m++) % 8;
Ym[index] = temp % 2 + '0';
temp = temp / 2;
}
if (m < 8)
m = 8;
else if (m > 8 && m < 16)
m = 16;
else if (m > 16 && m < 24)
m = 24;
i = k - 1;
} else if (s[i + 1] == '.')
right = false;
else if (i == s.length() - 1)
right = false;
else if(s[i - 1] == '~')
right = false;
}
}
int flag1 = 1;
for (int i = 0; i < 32; ++i) {
if (i == 0 && Ym[i] == '0') {
right = false;
break;
}
if (flag1) {
if (Ym[i] == '0')
flag1 = 0;
} else {
if (Ym[i] == '1') {
right = false;
break;
}
}
}
if (flag1)
right = false;
if (address == 0 || address == 127)
continue;
if (right) {
if (address >= 1 && address <= 127)
A++;
else if (address >= 128 && address <= 191)
B++;
else if (address >= 192 && address <= 223)
C++;
else if (address >= 224 && address <= 239)
D++;
else if (address >= 240 && address <= 255)
E++;
if (address == 10 || (address == 172 && address2 >= 16 && address2 <= 31) ||
(address == 192 && address2 == 168))
P++;
} else wrong++;
//测试Ym转化是否正确
}
cout << A << " " << B << " " << C << " " << D << " " << E << " " << wrong << " "
<< P;
}
// 64 位输出请用 printf("%lld")