
typedef int score_t;
typedef int count_t;
#include <map>
#include <iostream>
#include <vector>
int main()
{
std::map<score_t, count_t> data;

// step1: input: use ctrl-z to end
for (score_t tmp; std::cin >> tmp;)
{
	++data[tmp];
}
// step2: get identical number
std::vector<score_t> most_appeared;
count_t max;
std::map<score_t, count_t>::iterator i = data.begin();
most_appeared.push_back(i->first);
max = i->second;
for (++i;
	i != data.end(); ++i)
{
	if (i->second > max)
	{
		max = i->second;
		most_appeared.clear();
		most_appeared.push_back(i->first);
	}
	else if (i->second == max)
	{
		most_appeared.push_back(i->first);
	}
	else continue;
}
// step 3: output
std::cout << "The highest score is: " << data.rbegin()->first << std::endl;
std::cout << "The lowest score is: " << data.begin()->first << std::endl;
std::cout << "The identical score" 
	<< (most_appeared.size() > 1 ? "s are: " : " is");
for (int i = 0; i  != most_appeared.size(); ++i)
{
	std::cout << most_appeared[i] << " ";
}

return 0;
}
/*
see <c++ primer> 4th
section 10.3.4#Programming Implications of the Subscript Behavior
*/