#include <bits/stdc++.h> using namespace std; struct word { string str; int cnt; word(string _s,int _c):str(_s),cnt(_c){} }; void splitString(const string& s, vector<word>& v, const string& c) { string::size_type pos1, pos2, pos; pos2 = s.find(c); pos1 = 0; string tmp; while (string::npos != pos2) { //v.push_back(s.substr(pos1, pos2 - pos1)); tmp = s.substr(pos1, pos2 - pos1); pos = tmp.find(':'); v.push_back(word(tmp.substr(0, pos), stoi(tmp.substr(pos + 1)))); pos1 = pos2 + c.size(); pos2 = s.find(c, pos1); } if (pos1 != s.size()) { tmp = s.substr(pos1, pos2 - pos1); pos = tmp.find(':'); v.push_back(word(tmp.substr(0, pos), stoi(tmp.substr(pos + 1)))); } } int main() { string str; while (cin >>str) { auto pos = str.find('@'); string str1, str2; str1 = str.substr(0, pos); str2 = str.substr(pos + 1); //cout << str1 << " " << str2 << endl; vector<word> all_vec; splitString(str1, all_vec, ","); vector<word> used_vec; splitString(str2, used_vec, ","); map<string, int> m; for (auto it : used_vec) { m[it.str] = it.cnt; } string res; for (int i = 0; i < all_vec.size(); ++i) { if (m.find(all_vec[i].str) != m.end()) all_vec[i].cnt -= m[all_vec[i].str]; if (all_vec[i].cnt>0) { res += all_vec[i].str + ":" + to_string(all_vec[i].cnt) + ","; } } if (!res.empty() && res[res.size() - 1] == ',') res = res.substr(0, res.size()-1); cout << res << endl; } return 0; } /* a:3,b:5,c:2@a:1,b:2 */