#include <iostream> #include<sstream> #include<cmath> #include<vector> using namespace std; bool trueIP(const string&IP) { istringstream ss(IP); int num=0;string temp; while(getline(ss,temp,'.')) { if(++num>4||temp.empty()||stoi(temp)>255) return false; } return num==4; } bool truemask(const string&mask) { istringstream ss(mask); unsigned num=0;string temp; while(getline(ss,temp,'.')) { num=(num<<8)+stoi(temp); } if(!num) return false; num=~num+1; if(num==1)return false; if((num&(num-1))==0) return true; return false; } bool isprivate(const string&IP) { istringstream ss(IP); vector<int> num;string temp; while(getline(ss,temp,'.')) {num.emplace_back(stoi(temp)); } if(num[0]==10) return true; if(num[0]==172&&(num[1]>=16&&num[1]<=31)) return true; if(num[0]==192&&num[1]==168) return true; return false; } int main() { string line; int A=0,B=0,C=0,D=0,E=0,F=0,G=0; while (getline(cin,line)) { istringstream ss(line); int ad; vector<string> sv;string temp; while(getline(ss,temp,'~')) {sv.emplace_back(temp);} ad=stoi(sv[0].substr(0,sv[0].find_first_of('.'))); if(trueIP(sv[0])&&(ad==0||ad==127)) { continue; } if(!trueIP(sv[1])||!truemask(sv[1])) F++; else { if(!trueIP(sv[0]))F++; else {if(isprivate(sv[0])) G++; if(ad>=1&&ad<=126)A++; else if(ad>=128&&ad<=191)B++; else if(ad>=192&&ad<=223)C++; else if(ad>=224&&ad<=239)D++; else if(ad>=240&&ad<=255)E++;} }; } cout<<A<<" "<<B<<" "<<C<<" "<<D<<" "<<E<<" "<<F<<" "<<G; }