#include <iostream>
#include <list>
#include <string>
#include <sstream>
#include <stack>

using namespace std;

// Suposem que aquesta funció ja està implementada
void longituds_blocs(const stack<int>& p, list<int>& l);


#ifndef IOFUNCTIONS
#define IOFUNCTIONS

// ---------- LECTURA PILA ----------

// Pre: cert
// Post: llegeix la pila de l'entrada i la guarda a p.
template <typename T>
void llegir_pila(const string& line, stack<T>& p) {
	istringstream mycin(line.substr(1, line.size()-2));
	T x;
	while (mycin >> x) {
		p.push(x);
	}
}

// ---------- ESCRIPTURA PILA RECURSIVA ----------

template<typename T>
void escriu_pila_rec(stack<T> &s) {
	if (not s.empty()) {
		T x = s.top();
		s.pop();
    bool writespace = not s.empty();
    escriu_pila_rec(s);
    if (writespace) cout << " ";
    cout << x;
  }
}

template<typename T>
void escriu_pila(const stack<T>& s) {
	stack<T> paux{s};
	cout << '[';
	escriu_pila_rec(paux);
  cout << ']';
	cout << endl;
}

// ---------- ESCRIPTURA LLISTA RECURSIVA ----------

template<typename T>
void escriu_llista_rec(typename list<T>::const_iterator it, typename list<T>::const_iterator fi) {
	if (it != fi) {
		cout << *it;
		typename list<T>::const_iterator seg = it;
		++seg;
		if (seg != fi) cout << ", ";
		escriu_llista_rec<T>(seg, fi);
  }
}

template<typename T>
void escriu_llista(const list<T>& l) {
	cout << '[';
	escriu_llista_rec<T>(l.begin(), l.end());
  cout << ']';
	cout << endl;
}

#endif

int main() {
	string lin;
	while (getline(cin, lin)) {
		stack<int> p;
		llegir_pila(lin, p);
		list<int> l;
		longituds_blocs(p, l);
		escriu_llista<int>(l);
	}	
	return 0;
}
