#include <iostream>
#include <string>
using namespace std;
class Literka
{
public:
char nazwa = 0;
int ilosc = 0;
int ascii = 0;
};
void sort(Literka * t, int l, int p) // quicksort
{
int v = t[(l + p) / 2].ascii;
int i = l;
int j = p;
Literka bufor;
do
{
while (t[i].ascii < v) i++;
while (t[j].ascii > v) j--;
if (i <= j)
{
bufor = t[j];
t[j] = t[i];
t[i] = bufor;
i++;
j--;
}
} while (i <= j);
if (j > l) sort(t, l, j);
if (i < p) sort(t, i, p);
}
int main()
{
int pozycja = 0; // ilość zapisanych literek
Literka tab[60]; // tablica na literki
unsigned int N;
cin >> N;
cin.ignore();
if (N > 150) return 0; // N <= 150
while (N--)
{
string napis;
getline(cin, napis);
if (napis.size() > 200) return 0; //maks. 200 znaków
for (int i = 0; i < napis.size(); i++) // tylko a-z, A-Z i spacja
{
if (((int)napis[i] < 65 && (int)napis[i] != 32) ||
((int)napis[i] > 90 && (int)napis[i] < 97) ||
(int)napis[i] > 122) return 0;
}
for (int i = 0; i < napis.size(); i++) // zapisywanie liter
{
bool a = true; // pomocniczy bool, true na starcie
if (napis[i] == ' '); // jesli spacja nie zapisuj
else // jezeli litery
{
for (int j = 0; j < pozycja; j++) // szukamy czy litera juz wystapila
{
if (tab[j].nazwa == napis[i]) // jesli znaleziono
{
tab[j].ilosc++; // zwiekszam ilosc
a = false; // bool wylaczony
}
}
if(a) // jezeli nie znaleziono litery to ja dodajemy bool = true, jezeli znaleziono bool = false;
{
tab[pozycja].nazwa = napis[i];
tab[pozycja].ilosc++;
pozycja++; //tablica liter zwiekszona o jedna
}
}
}
}
for (int i = 0; i < pozycja; i++) //dodaje skladnik int ascii do kazdej zapisanej pozycji
{
tab[i].ascii = (int)tab[i].nazwa; // konwersja
if (tab[i].ascii > 64 && tab[i].ascii < 91) tab[i].ascii += 100; // jezeli duze to na potrzeby sortowania zwiekszam
}
sort(tab, 0, pozycja - 1); // sortowanie
for (int i = 0; i < pozycja; i++) // wypisanie liter
{
cout << tab[i].nazwa << " " << tab[i].ilosc << endl;
}
}