#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;
}