#include <iostream>
#include <map>
#include <list>
using namespace std;

template <typename K, typename V>
void claus(const map<K,V>& m, list<K>& l);

// ------------------------------------------------------------
// Funció de lectura: construeix el map a partir d'una línia
// Format: {{clau1,valor1}, {clau2,valor2}, ...}
// ------------------------------------------------------------
void llegeix_map(const string &line, map<string,int> &m) {
	if (line != "{}") {
    int i = 1;
    while (i < (int)line.size()-1) {
			if (line[i] == '{') {
				++i;

        // Llegim la clau
        string key;
        while (i < (int)line.size() and line[i] != ',') {
					key += line[i];
          ++i;
        }

        ++i; // saltem la coma

        // Llegim el valor
        string value_str;
        while (i < (int)line.size() and line[i] != '}') {
					value_str += line[i];
          ++i;
        }

        ++i; // saltem }

        if (!key.empty()) {
					int value = stoi(value_str);
          m[key] = value;  // si es repeteix, sobrescriu
				}
			}
			else {
				++i;
			}
		}
  }
}


// ------------------------------------------------------------
// Acció d'escriptura: escriu la list pel canal de sortida.
// Format: [a,b,c, ...]
// ------------------------------------------------------------
template <typename T>
ostream& operator<<(ostream &os, const list<T> &l) {
	os << '[';
	bool first = true;
	for (const T &x : l) {
		if (! first) {
			os << ',';
		}
		first = false;
		os << x;
	}
	os << ']';
	return os;
}


int main() {
	string line;
  while (getline(cin, line)) {
		map<string,int> m;
		llegeix_map(line, m);
		
		list<string> l;
		claus(m, l);
	
		cout << l << endl;
	}
	return 0;
}
