#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")