#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
*/