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