#include <iostream>
#include <string>
#include <algorithm>

using namespace std;


struct Names {
	string imie;
	int wystapienia;
};

bool sortByWystapienia(Names a, Names b) {
	if (a.wystapienia == b.wystapienia) {
		return a.imie < b.imie;
	}
	else {
		return a.wystapienia > b.wystapienia;
	}
}

int main()
{
	string imie, nazwisko;
	int lp, ile = 0;
	char kropka;
	string duplicates_names[100000]; //zmień na 100000
	Names unique_names[100000]; //zmień na 100000

	while (cin >> lp >> kropka >> nazwisko >> imie) {	
		//Zamieniam na duże litery
		string upper = "";
		for (auto c : imie) {
			upper += toupper(c);
		}
		duplicates_names[ile++] = upper;
	}
	sort(duplicates_names, duplicates_names + ile); //Sortuje imionami

	ile = 0;
	string old_name = "";

	int idx = 0;
	int count = 0;
	//Zliczam i zapisuję unikalne imiona
	for (auto s : duplicates_names) {
		if (s == "") {
			Names n;
			n.imie = old_name;
			n.wystapienia = count;
			unique_names[idx++] = n;
			break;
		}
		if (old_name != s && old_name != "") {
			Names n;
			n.imie = old_name;
			n.wystapienia = count;
			unique_names[idx++] = n;		
			count = 1;
		}
		else {			
			count++;
		}	
		old_name = s;
	}
	//Sortuję unikalne po liczbie wystapień
	sort(unique_names, unique_names + idx, sortByWystapienia);

	for (auto s : unique_names) {
		if (s.imie == "") break; //tablica ma 100000 elementów - część pustych, bo wprowadzono np.5.
		cout << s.imie << " " << s.wystapienia << endl;
	}

	return 0;
}