#include <iostream>
#include <vector>
#include <string>
#include <algorithm> //random_shuffle
#include <ctime> //time
#include <cstdlib> //srand
#include <set> //multiset

struct SinhVien {
	typedef bool (*Comparator)(const SinhVien&, const SinhVien&);
	std::string ten;
	int diem;
	SinhVien(const std::string& t="", int d=0) : ten(t), diem(d) {}
	static bool cmpByScore(const SinhVien& lhs, const SinhVien& rhs)
	{ return lhs.diem < rhs.diem; };
};

int main()
{
	srand(time(0));
	std::vector<SinhVien> lopHoc;
	
	// nhập sv
	std::string ten;
	int diem;
	while (std::cin >> ten >> diem) lopHoc.emplace_back(ten, diem);
	
	// xáo trộn ngẫu nhiên lopHoc
	std::random_shuffle(lopHoc.begin(), lopHoc.end());
	// xuất danh sách nhóm, mỗi nhóm tối đa 6 sv
	const int MAX_STUD_PER_GROUP = 6;
	int groupId = 1, groupCount = 0;
	for (const auto& sv : lopHoc)
	{
		if (!groupCount) std::cout << "\nNhóm " << groupId << ": " << sv.ten;
		else 	         std::cout << ", " << sv.ten;
		if (++groupCount == MAX_STUD_PER_GROUP) ++groupId, groupCount = 0;
	}
	std::cout << "\n";
		
	// tạo danh sách sv có điểm tăng dần
	std::multiset<SinhVien, SinhVien::Comparator>
		dssv(lopHoc.begin(), lopHoc.end(), SinhVien::cmpByScore);
	// xuất danh sách điểm từ thấp đến cao
	std::cout << "\nDanh sách lớp học (điểm từ thấp đến cao)\n";
	for (const auto& sv : dssv)
		std::cout << sv.ten << ": " << sv.diem << "\n";
	// chèn thêm 1 sv tên Mai có điểm 7
	dssv.emplace("Mai", 7); //hoặc dssv.insert(newSv);
	// xuất danh sách lớp học sau khi chèn
	std::cout << "\nDanh sách lớp học sau khi chèn\n";
	for (const auto& sv : dssv)
		std::cout << sv.ten << ": " << sv.diem << "\n";
	
}