#include <stdio.h>
#define size 15
#include <string.h>
int numip[7]={0};                                                   //储存输出值
int istrueip(char *ip,int voild){                                     //这里ip判断的很细
    int num[5]={0,-1,-1,-1,-1},k=1,temp=0,flag=0,len=strlen(ip);
        for(int i=0;i<len;i++){                                       //.,四个整数足够
            if(ip[i]=='.'){
                num[0]++;
            }
        }
        if(num[0]!=3){ 
            return 5;
        }

        for(int i=0;i<len;i++){
            if(i<len-1 && ip[i]==0 && ip[i+1]==0){                  //整数01.2.2.2,判错误,01错了
                return 5;
            }
            temp=0,flag=0;
            while('0'<=ip[i] && ip[i]<='9' && i<len){                 //记这个整数
                temp=temp*10+(ip[i]-'0');
                i++;
                flag=1;                                                 //flag标记有整数
            }
            if(flag==1){num[k]=temp;}                             
            if(num[k]>255||num[k]<0){                               //超出255错误,初始-1,没变错误
                return 5;
            }
            k++;
        }
        
        if((voild)&&(num[1]==10 || (num[1]==172&&num[2]>=16&&num[2]<=31) || (num[1]==192&&num[2]==168))){                                               //参数voild ,表示私有变不变,因为0和172开头的特性
            numip[6]++;
        }
        if(num[1]>=1&&num[1]<=126){                             //下面是五类的分类
            return 0;
        }
        if(num[1]>=128 && num[1]<=191){ return 1;}
        if(num[1]>=192 &&num[1]<=223){return 2;}
        if(num[1]>=224 &&num[1]<=239){return 3;}
        if(num[1]>=240 &&num[1]<=255){return 4;}
        return 7;
}
int istrueipx(char*ipx){
    int num[5]={0,-1,-1,-1,-1},k=1,temp=0,flag=0,len=strlen(ipx);
    int is1[8]={0,128,192,224,240,248,252,254};                //这个是前一后0的所有数
        for(int i=0;i<len;i++){
            if(ipx[i]=='.'){                                   //和ip一样
                num[0]++;
            }
        }
        if(num[0]!=3){
            return 5;
        }

        for(int i=0;i<len;i++){
            temp=0;
            while('0'<=ipx[i] && ipx[i]<='9' && i<len){
                temp=temp*10+(ipx[i]-'0');
                i++;
            }
            num[k]=temp;
            k++; 
        }                           //掩码四个数存入
        for(int i=1;i<5;i++){
            if(num[i]!=255){                     //第一个不为255的数,
                for(int j=0;j<8;j++){             //判断前一后0是不是
                    if(num[i]!=is1[j]){           
                        continue;
                    }
                    flag=1;                     //flag标志 是
                    break;
                }
                if(flag==0){return 5;}          //不是就表示错误掩码
                for(int j=i+1;j<5;j++){         //是的话,后0判断注意这里i+1,没有+1第8个示例过不去
                    if(num[j]!=0){return 5;}
                }
            }
        }
        if(num[1]==255&&num[2]==255&&num[3]==255&&num[4]==255){        //两个特例错误
            return 5;
        }
        if(num[1]==0&&num[2]==0&&num[3]==0&&num[4]==0){
            return 5;
        }
        return 7;
}
int main() {
    char input[2*size+1]={'\0'},ip[size]={'\0'},ipx[size]={'\0'};
    int temp=0;
    while (scanf("%s", input) != EOF) { // 注意 while 处理多个 case          //输入
        // 64 位输出请用 printf("%lld") to 
        for(int i=0;i<strlen(input);i++){    //找到~
            if(input[i]=='~'){
                strncpy(ip,input,i);          //前面的给ip
                strcpy(ipx,input+i+1);        //后面的给ipx,掩码
                break;
            }
        }
        temp=istrueipx(ipx);                  //先判断掩码
        if(temp==7){                            
            temp=istrueip(ip,1);              //掩码正确,归类ip
            if(temp<7){
                numip[temp]++;
            }
        }
        else{                                   //掩码不正确
            temp=istrueip(ip,0);                //参数0,不让他私有地址判断   
            if(temp!=7)
            numip[5]++;                         //ip返回的7是0...和127.....,,非7就是掩码错误,错误+1
        }
        strncpy(ip,"",strlen(ip));                 //字符串要重置
        strncpy(ipx,"",strlen(ipx));
    }
    for(int i=0;i<7;i++){                     //0是A,1是B,2是C,按顺序
        printf("%d ",numip[i]);
    }
    return 0;
}