/*
4. Define a class Name_value that holds a string and a value. Rework exercise 19 
in Chapter 4 to use a vector<Name_value> instead of two vectors.
*/

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using std::string;
using std::vector;

class Name_value {
	string name;
	int value;
public:
	Name_value(string s, int v) : name(s), value(v) {}
	string getName() const { return name; }
	int getVal() { return value; }
};

bool sortbyName(const Name_value& a,
	const Name_value& b)
{
	return (a.getName() < b.getName());
}

int main() {
	string s;
	int v;
	vector<Name_value> vNv;
	while (std::cin >> s >> v) {
		vNv.push_back(Name_value(s, v));
	}
	for (Name_value nv : vNv) std::cout << nv.getName() << ", " << nv.getVal() << '\n';
	sort(vNv.begin(), vNv.end(),sortbyName);
	for (Name_value nv : vNv) std::cout << nv.getName() << ", " << nv.getVal() << '\n';
}