// btree.cc : Eine Binaerbaum-Klasse

#include <stdlib.h>
#include <stdio.h>
#include <wctype.h>
#include <locale>
#include <iostream>
#include <string>
#include <string.h>
using namespace std;

class tree {
  struct node{
    string e; int c; node *l, *r;   // Element, Zähler, linker/rechter Teilbaum
    node() { c = 1; l = NULL; r = NULL; }  // Konstruktor fuer struct in C++
  } *n;
public:
  tree() { n = NULL; }        // Konstruktor : fuer Deklarationen
  tree(node *nn) { n = nn;}   // Konstruktor : fuer Initialisierungen

  node* insert(const string &e) {  // Member-Fumktion :
    if (n == NULL) {
      n = new node;           // liefert und initialisiert struct node n
      n->e = e;               // Datenelement
    }
    else if (e == n->e) { n->c++; } // e vorhanden, erhoehe Zaehler
    // lexikographisch (deutsch, siehe `man locale`, unten: "setlocale"
    else if ( strcoll ( e.c_str(), n->e.c_str() ) < 0 )
    // Bemerkung: .c_str() ist eine member-Funktion des std-Datentyps string
    // die "den C-String" zurueckgibt, also einen 0-terminierten Array von char
      n->l = tree(n->l).insert(e);
    else
      n->r = tree(n->r).insert(e);
    return this->n;
  }
  friend ostream& inorder(ostream& os, tree t) {
    if (t.n) {
      inorder(os, tree(t.n->l) );
      os << t.n->e << '(' << t.n->c << ")\n" ;
      inorder(os, tree(t.n->r) );
    }
    return os;
  }
};

int main() {
  tree tr;                           // Deklariere Baum aus Strings
  setlocale(LC_ALL, "de_DE.UTF-8");  // cf. "man setlocale", "man locale"

  string line; char s[200];
  wchar_t w[200], wline[2000], *wlp, *wp;
  while (getline(cin,line)) {                // lies eine Zeile Text
    mbstowcs(wline,line.c_str(),2000);       // konvertiere nach wide char
    wlp = wline;
    while (*wlp) {                           // bis zum Zeilenende ...
      while (*wlp && !iswalpha(*wlp)) wlp++; // finde Wortanfang
      if (!*wlp) continue;                   // Zeile zu Ende
      wp = w;
      while (iswalpha(*wlp)) *wp++=*wlp++;   // kopiere Wort
      *wp = L'\0';                           // Wortende markieren
      wcstombs(s,w,200);                     // Wort nach UTF-8 konvertieren
      tr.insert(s);                          // in Baum einfuegen
    }
  }
  inorder(cout, tr);   // Ausgabe der sortierten Woerter
}
