#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<vector<int>> vec;
vector<int> tmp;
vector<int> res(7,0);
//收集字符串,并转化为数字。
//如果收集到的数字大于255,res[5]++ ,vec不保存
//如果连续出现两个'.',res[5]++ ,vec不保存
void getstr(string str) {
while(cin >> str) {
int flag = 0;
int size = str.size();
int num = 0;
for(int i=0; i<size; i++) {
if(i >= 1 && str[i] == '.' && str[i-1] == '.') {
res[5]++;
flag = 1;
break;
}
if(str[i] != '.' && str[i] != '~') {
num = num*10 + str[i] - '0';
} else {
if(num > 255) {res[5]++; flag = 1; break;}
tmp.push_back(num);
num = 0;
}
}
if(flag) continue;
tmp.push_back(num);
vec.push_back(tmp);
tmp.clear();
}
}
//判断是否为掩码
bool ismask(vector<int> mask) {
if((mask[4] == 254 || mask[4] == 252 || mask[4] == 248 || mask[4] == 240 || mask[4] == 224 || mask[4] == 192 || mask[4] == 128) &&
(mask[5] == 0 && mask[6] == 0 && mask[7] == 0)) return true;
if(mask[4] == 255 &&
(mask[5] == 254 || mask[5] == 252 || mask[5] == 248 || mask[5] == 240 || mask[5] == 224 || mask[5] == 192 || mask[5] == 128 || mask[5] == 0)
&& (mask[6] == 0 && mask[7] == 0)) return true;
if(mask[4] == 255 && mask[5] == 255 &&
(mask[6] == 254 || mask[6] == 252 || mask[6] == 248 || mask[6] == 240 || mask[6] == 224 || mask[6] == 192 || mask[6] == 128 || mask[6] == 0)
&& mask[7] == 0) return true;
if(mask[4] == 255 && mask[5] == 255 && mask[6] == 255 &&
(mask[7] == 254 || mask[7] == 252 || mask[7] == 248 || mask[7] == 240 || mask[7] == 224 || mask[7] == 192 || mask[7] == 128 || mask[7] == 0))
return true;
return false;
}
/*
//判断所有的IP地址划分为 A,B,C,D,E五类
A类地址1.0.0.0~126.255.255.255;
B类地址128.0.0.0~191.255.255.255;
C类地址192.0.0.0~223.255.255.255;
D类地址224.0.0.0~239.255.255.255;
E类地址240.0.0.0~255.255.255.255
私网IP范围是:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255 */
void judge(void){
int size = vec.size();
for(int i=0; i<size; i++){
if(ismask(vec[i]) == false) {res[5]++; continue;}
if(vec[i][0] >= 1 && vec[i][0] < 127) res[0]++;
if(vec[i][0] >= 128 && vec[i][0] < 192) res[1]++;
if(vec[i][0] >= 192 && vec[i][0] < 224) res[2]++;
if(vec[i][0] >= 224 && vec[i][0] < 240) res[3]++;
if(vec[i][0] >= 240 && vec[i][0] <= 255) res[4]++;
if(vec[i][0] == 10 ||
(vec[i][0] == 172 && vec[i][1] >= 16 && vec[i][1] < 32) ||
(vec[i][0] == 192 && vec[i][1] == 168)) res[6]++;
}
}
int main() {
string str;
getstr(str);
judge();
cout << res[0] << ' ' << res[1] << ' ' << res[2] << ' ' << res[3] << ' ' <<res[4] << ' ' << res[5] << ' ' << res[6] << endl;
}