#include <cctype>
#include <iostream>
#include<map>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
struct Com
{
bool operator()(const pair<string,int>&v1,const pair<string,int>&v2)
{
if(v1.second==v2.second)//当次数相同,按照字典序比较
return v1.first < v2.first;//字典序升序
return v1.second > v2.second;//次数降序比较
}
};
int main() {
string s;
map<string, int> m;
getline(cin, s);//存在空格,采用 getline 读取
s[0] = tolower(s[0]);//将首元素从大写变为小写
s[s.size() - 1] = ' ';//去掉句号
int left = 0, right = 0;
while (right < s.size() - 1)
{
while (s[right] != ' ')//right寻找空格
right++;
string tem = s.substr(left, right - left);//截取每个单词
m[tem]++;
right++;
left = right;
}
vector<pair<string,int>> v(m.begin(),m.end());//使用迭代器区间构造出 vector<pair<string,int>>
//vector<pair<string,int>> v = {m.begin(),m.end()}; //等价与上
sort(v.begin(),v.end(),Com());//自定义仿函数
for(size_t i=0;i<v.size();i++)
{
cout<< v[i].first <<":"<<v[i].second<<endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")