#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    // 1. std::map
    map<string,int> m;

    // 5. std::unordered_map
    // unordered_map<string,int> m;

    for (string s; cin >> s; ) {
        ++m[s];
    }

    for (auto i = m.begin(); i != m.end(); ++i) {
        cout << setw(20) << (*i).first << '|';
        cout << i->second << '\n';
    }

    // 2. Range-based for loop
    // for (auto& e : m) {
    //     cout << setw(20) << e.first << '|' << e.second << '\n';
    // }

    // 3. Structured binding (C++17)
    // for (auto& [s, n] : m) {
    //     cout << setw(20) << s << '|' << n << '\n';
    // }

    // 4. Finding an element
    // auto it = m.find( "#include"s );
    // if (it != m.end()) {
    //     auto& [s, n] = *it;
    //     cout << '\n' << s << " appears " << n << " times." << '\n';
    // }
}
