#include <locale>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <sstream>
#include <string>
#include <map>
class my_ctype : public
std::ctype<char>
{
mask my_table[table_size];
public:
my_ctype(size_t refs = 0)
: std::ctype<char>(&my_table[0], false, refs)
{
std::copy_n(classic_table(), table_size, my_table);
my_table['-'] = (mask)space;
my_table['\''] = (mask)space;
my_table['.'] = (mask)space;
my_table[','] = (mask)space;
my_table[';'] = (mask)space;
my_table[':'] = (mask)space;
my_table['!'] = (mask)space;
my_table['!'] = (mask)space;
}
};
int main() {
std::istringstream input("yoba,batya;batya-pidor!krestoblyad");
std::locale x(std::locale::classic(), new my_ctype);
input.imbue(x);
std::map<std::string, int> dict;
while (input.good()) {
std::string s;
input >> s;
dict[s]++;
}
for (auto s : dict) {
std::cout << s.first << ":" << s.second << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGxvY2FsZT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWFwPgoKY2xhc3MgbXlfY3R5cGUgOiBwdWJsaWMKc3RkOjpjdHlwZTxjaGFyPgp7CiAgICBtYXNrIG15X3RhYmxlW3RhYmxlX3NpemVdOwpwdWJsaWM6CiAgICBteV9jdHlwZShzaXplX3QgcmVmcyA9IDApICAKICAgICAgICA6IHN0ZDo6Y3R5cGU8Y2hhcj4oJm15X3RhYmxlWzBdLCBmYWxzZSwgcmVmcykKICAgIHsKICAgICAgICBzdGQ6OmNvcHlfbihjbGFzc2ljX3RhYmxlKCksIHRhYmxlX3NpemUsIG15X3RhYmxlKTsKICAgICAgICBteV90YWJsZVsnLSddID0gKG1hc2spc3BhY2U7CiAgICAgICAgbXlfdGFibGVbJ1wnJ10gPSAobWFzaylzcGFjZTsKICAgICAgICBteV90YWJsZVsnLiddID0gKG1hc2spc3BhY2U7CiAgICAgICAgbXlfdGFibGVbJywnXSA9IChtYXNrKXNwYWNlOwogICAgICAgIG15X3RhYmxlWyc7J10gPSAobWFzaylzcGFjZTsKICAgICAgICBteV90YWJsZVsnOiddID0gKG1hc2spc3BhY2U7CiAgICAgICAgbXlfdGFibGVbJyEnXSA9IChtYXNrKXNwYWNlOwogICAgICAgIG15X3RhYmxlWychJ10gPSAobWFzaylzcGFjZTsKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgc3RkOjppc3RyaW5nc3RyZWFtIGlucHV0KCJ5b2JhLGJhdHlhO2JhdHlhLXBpZG9yIWtyZXN0b2JseWFkIik7CiAgICBzdGQ6OmxvY2FsZSB4KHN0ZDo6bG9jYWxlOjpjbGFzc2ljKCksIG5ldyBteV9jdHlwZSk7CiAgICBpbnB1dC5pbWJ1ZSh4KTsKICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBpbnQ+IGRpY3Q7CgogICAgd2hpbGUgKGlucHV0Lmdvb2QoKSkgewogICAgCXN0ZDo6c3RyaW5nIHM7CiAgICAJaW5wdXQgPj4gczsKICAgIAlkaWN0W3NdKys7CiAgICB9CiAgICAKICAgIGZvciAoYXV0byBzIDogZGljdCkgewogICAgICAgIHN0ZDo6Y291dCA8PCBzLmZpcnN0IDw8ICI6IiA8PCBzLnNlY29uZCA8PCBzdGQ6OmVuZGw7CiAgICB9CiAgICAKICAgIHJldHVybiAwOwp9Cg==