#include <iostream> #include <unordered_map> #include <map> #include <algorithm> #include <queue> #include <vector> using namespace std; //堆 // struct Compare // { // bool operator()(const pair<string,int>& p1,const pair<string,int>& p2) // { // if(p1.second != p2.second) // { // return p1.second < p2.second; // } // else // { // return p1.first > p2.first; // } // } // }; // int main() { // string s; // unordered_map<string,int> umap; // while(getline(cin,s)) // { // string temp; // for(int i = 0; i < s.size(); i++) // { // if(s[i] == ' ' || s[i] == '.') // { // if(temp != "") // umap[temp]++; // temp = ""; // } // else // { // temp+=tolower(s[i]); // } // } // } // priority_queue<pair<string,int>,vector<pair<string,int>>,Compare> pq; // for(auto& e : umap) // { // pq.push(e); // } // while(!pq.empty()) // { // auto e = pq.top(); // cout << e.first << ":" << e.second << endl; // pq.pop(); // } // } //sort struct Compare { bool operator()(const pair<string,int>& p1,const pair<string,int>& p2) { return p1.second > p2.second; } }; int main() { string s; map<string,int> map; while(getline(cin,s)) { string temp; for(int i = 0; i < s.size(); i++) { if(s[i] == ' ' || s[i] == '.') { if(temp != "") map[temp]++; temp = ""; } else { temp+=tolower(s[i]); } } } vector<pair<string,int>> v(map.begin(),map.end()); sort(v.begin(),v.end(),Compare()); for(auto& e : v) { cout << e.first << ":" << e.second << endl; } }