#include <iostream>
#include <map>
#include <iostream>     // std::cout
#include <iterator>     // std::next
#include <list>         // std::list
#include <algorithm>    // std::for_each
#include <limits.h>
using namespace std;

int main() {
	multimap<int, string, greater<int> > m;  //instead of multimap<int, string > m;
	m.insert(make_pair(95, "Foo"));
	m.insert(make_pair(95, "Bar"));
    m.insert(make_pair(95, "Ball"));
	m.insert(make_pair(93, "Abacus"));
	m.insert(make_pair(92, "Sober"));
	m.insert(make_pair(93, "Globe"));
	m.insert(make_pair(93, "Hello"));
	m.insert(make_pair(93, "Ameen"));
	//for(auto it : m)
	multimap<int, string, greater<int> >:: iterator it = m.begin(), st, ed;
	vector<string> vec;
	bool sameKey = true;
	int lastKey = INT_MAX;
	while(it != m.end())
	{
		//cout << it->first << " : " << it->second <<endl;
		//pair<int, string> temp = *it;
		if(it->first < lastKey)
		{
		sort(vec.begin(), vec.end());
			for(int i = 0; i < vec.size(); i++){
				st->second = vec[i];
				st++;
			}
			st = it;
			vec.clear();
		}
		vec.push_back(it->second);
		lastKey = it->first;
		it++;
	}
	sort(vec.begin(), vec.end());
	for(int i = 0; i < vec.size(); i++){
		st->second = vec[i];
		st++;
	}
	it = m.begin();
	while(it != m.end())
	{
		cout << it->first << " : " << it->second <<endl;
		it++;
	}

	return 0;
}