#include<iostream>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<climits>
#include<numeric>
#include<set>
#include<sstream>
#include<map>
#include<vector>
#include<string>
#include<regex>
using namespace std;
const long long MOD = (long long)(1e9 + 7);
vector<string> split(const string& haystack, const string& needle) {
vector<string> result;
size_t start_pos = 0;
size_t found_pos = haystack.find(needle, start_pos);
while (found_pos != string::npos) {
size_t count = found_pos - start_pos;
string token = haystack.substr(start_pos, count);
if (!token.empty()) {
result.push_back(token);
}
start_pos = found_pos + needle.length();
found_pos = haystack.find(needle, start_pos);
}
string last_token = haystack.substr(start_pos);
if (!last_token.empty()) {
result.push_back(last_token);
}
return result;
}
int main() {
string line;
map<string, int> goals;
while (getline(cin, line)) {
auto parts = split(line, " - ");
int lastSpace = parts[0].find_last_of(" ");
string team_one = parts[0].substr(0, lastSpace);
int grade_one = stoi(parts[0].substr(lastSpace + 1));
int firstSpace = parts[1].find_first_of(" ");
string team_two = parts[1].substr(firstSpace + 1);
int grade_two = stoi(parts[1].substr(0, firstSpace));
goals[team_one] += grade_one;
goals[team_two] += grade_two;
}
vector<pair<string, int>> teams{ goals.begin(),goals.end() };
sort(teams.begin(), teams.end(), [](const auto& a, const auto& b) {
return a.second != b.second ? a.second > b.second:a.first < b.first;
});
for (auto entry : teams) {
cout << entry.first << " " << entry.second << endl;
}
/*for (const auto& [team, score] : teams) {
cout << team << " " << score << endl;
}*/
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGlvbWFuaXA+CiNpbmNsdWRlPGNsaW1pdHM+CiNpbmNsdWRlPG51bWVyaWM+CiNpbmNsdWRlPHNldD4KI2luY2x1ZGU8c3N0cmVhbT4KI2luY2x1ZGU8bWFwPgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPHN0cmluZz4KI2luY2x1ZGU8cmVnZXg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgbG9uZyBsb25nIE1PRCA9IChsb25nIGxvbmcpKDFlOSArIDcpOwoKdmVjdG9yPHN0cmluZz4gc3BsaXQoY29uc3Qgc3RyaW5nJiBoYXlzdGFjaywgY29uc3Qgc3RyaW5nJiBuZWVkbGUpIHsKCXZlY3RvcjxzdHJpbmc+IHJlc3VsdDsKCXNpemVfdCBzdGFydF9wb3MgPSAwOwoJc2l6ZV90IGZvdW5kX3BvcyA9IGhheXN0YWNrLmZpbmQobmVlZGxlLCBzdGFydF9wb3MpOwoJd2hpbGUgKGZvdW5kX3BvcyAhPSBzdHJpbmc6Om5wb3MpIHsKCQlzaXplX3QgY291bnQgPSBmb3VuZF9wb3MgLSBzdGFydF9wb3M7CgkJc3RyaW5nIHRva2VuID0gaGF5c3RhY2suc3Vic3RyKHN0YXJ0X3BvcywgY291bnQpOwoJCWlmICghdG9rZW4uZW1wdHkoKSkgewoJCQlyZXN1bHQucHVzaF9iYWNrKHRva2VuKTsKCQl9CgkJc3RhcnRfcG9zID0gZm91bmRfcG9zICsgbmVlZGxlLmxlbmd0aCgpOwoJCWZvdW5kX3BvcyA9IGhheXN0YWNrLmZpbmQobmVlZGxlLCBzdGFydF9wb3MpOwoJfQoKCXN0cmluZyBsYXN0X3Rva2VuID0gaGF5c3RhY2suc3Vic3RyKHN0YXJ0X3Bvcyk7CglpZiAoIWxhc3RfdG9rZW4uZW1wdHkoKSkgewoJCXJlc3VsdC5wdXNoX2JhY2sobGFzdF90b2tlbik7Cgl9CglyZXR1cm4gcmVzdWx0Owp9CgppbnQgbWFpbigpIHsKCXN0cmluZyBsaW5lOwoJbWFwPHN0cmluZywgaW50PiBnb2FsczsKCXdoaWxlIChnZXRsaW5lKGNpbiwgbGluZSkpIHsKCQlhdXRvIHBhcnRzID0gc3BsaXQobGluZSwgIiAtICIpOwoKCQlpbnQgbGFzdFNwYWNlID0gcGFydHNbMF0uZmluZF9sYXN0X29mKCIgIik7CgkJc3RyaW5nIHRlYW1fb25lID0gcGFydHNbMF0uc3Vic3RyKDAsIGxhc3RTcGFjZSk7CgkJaW50IGdyYWRlX29uZSA9IHN0b2kocGFydHNbMF0uc3Vic3RyKGxhc3RTcGFjZSArIDEpKTsKCgkJaW50IGZpcnN0U3BhY2UgPSBwYXJ0c1sxXS5maW5kX2ZpcnN0X29mKCIgIik7CgkJc3RyaW5nIHRlYW1fdHdvID0gcGFydHNbMV0uc3Vic3RyKGZpcnN0U3BhY2UgKyAxKTsKCQlpbnQgZ3JhZGVfdHdvID0gc3RvaShwYXJ0c1sxXS5zdWJzdHIoMCwgZmlyc3RTcGFjZSkpOwoKCQlnb2Fsc1t0ZWFtX29uZV0gKz0gZ3JhZGVfb25lOwoJCWdvYWxzW3RlYW1fdHdvXSArPSBncmFkZV90d287Cgl9CgoJdmVjdG9yPHBhaXI8c3RyaW5nLCBpbnQ+PiB0ZWFtc3sgZ29hbHMuYmVnaW4oKSxnb2Fscy5lbmQoKSB9OwoJc29ydCh0ZWFtcy5iZWdpbigpLCB0ZWFtcy5lbmQoKSwgW10oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewoJCXJldHVybiBhLnNlY29uZCAhPSBiLnNlY29uZCA/IGEuc2Vjb25kID4gYi5zZWNvbmQ6YS5maXJzdCA8IGIuZmlyc3Q7Cgl9KTsKCWZvciAoYXV0byBlbnRyeSA6IHRlYW1zKSB7CgkJY291dCA8PCBlbnRyeS5maXJzdCA8PCAiICIgPDwgZW50cnkuc2Vjb25kIDw8IGVuZGw7Cgl9CgkvKmZvciAoY29uc3QgYXV0byYgW3RlYW0sIHNjb3JlXSA6IHRlYW1zKSB7CgkJY291dCA8PCB0ZWFtIDw8ICIgIiA8PCBzY29yZSA8PCBlbmRsOwoJfSovCglyZXR1cm4gMDsKfQoK