#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
#include <sstream>
using namespace std;
struct entry {
string name;
unsigned quantity;
};
vector<entry> readData()
{
vector<entry> data;
string line, name;
unsigned quantity;
while (getline(cin, line) && istringstream(line) >> name >> quantity)
data.push_back({name,quantity});
return data;
}
void consolidate(vector<entry>& data)
{
auto f = data.begin(), l = data.end();
while (f!=l)
{
auto match = find_if(begin(data), f, [&](entry const& a) { return a.name == f->name; });
if (match != f)
{
match->quantity += f->quantity;
f = data.erase(f);
l = data.end();
} else
{
f++;
}
}
}
int main()
{
vector<entry> data = readData();
consolidate(data);
for (auto it = data.begin(); it != data.end(); ++it)
cout << it->name << " " << it->quantity << "\n";
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgZW50cnkgewogICAgc3RyaW5nIG5hbWU7CiAgICB1bnNpZ25lZCBxdWFudGl0eTsKfTsKCnZlY3RvcjxlbnRyeT4gcmVhZERhdGEoKQp7CiAgICB2ZWN0b3I8ZW50cnk+IGRhdGE7CgogICAgc3RyaW5nIGxpbmUsIG5hbWU7CiAgICB1bnNpZ25lZCBxdWFudGl0eTsKCiAgICB3aGlsZSAoZ2V0bGluZShjaW4sIGxpbmUpICYmIGlzdHJpbmdzdHJlYW0obGluZSkgPj4gbmFtZSA+PiBxdWFudGl0eSkKICAgICAgICBkYXRhLnB1c2hfYmFjayh7bmFtZSxxdWFudGl0eX0pOwoKICAgIHJldHVybiBkYXRhOwp9Cgp2b2lkIGNvbnNvbGlkYXRlKHZlY3RvcjxlbnRyeT4mIGRhdGEpCnsKICAgIGF1dG8gZiA9IGRhdGEuYmVnaW4oKSwgbCA9IGRhdGEuZW5kKCk7CiAgICB3aGlsZSAoZiE9bCkKICAgIHsKICAgICAgICBhdXRvIG1hdGNoID0gZmluZF9pZihiZWdpbihkYXRhKSwgZiwgWyZdKGVudHJ5IGNvbnN0JiBhKSB7IHJldHVybiBhLm5hbWUgPT0gZi0+bmFtZTsgfSk7CiAgICAgICAgaWYgKG1hdGNoICE9IGYpCiAgICAgICAgewogICAgICAgICAgICBtYXRjaC0+cXVhbnRpdHkgKz0gZi0+cXVhbnRpdHk7CiAgICAgICAgICAgIGYgPSBkYXRhLmVyYXNlKGYpOwogICAgICAgICAgICBsID0gZGF0YS5lbmQoKTsKICAgICAgICB9IGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGYrKzsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgdmVjdG9yPGVudHJ5PiBkYXRhID0gcmVhZERhdGEoKTsKICAgIAogICAgY29uc29saWRhdGUoZGF0YSk7CgogICAgZm9yIChhdXRvIGl0ID0gZGF0YS5iZWdpbigpOyBpdCAhPSBkYXRhLmVuZCgpOyArK2l0KQogICAgICAgIGNvdXQgPDwgaXQtPm5hbWUgPDwgIiAiIDw8IGl0LT5xdWFudGl0eSA8PCAiXG4iOwp9Cg==