#include <iostream>
#include <set>
#include <sstream>

using namespace std;

#include "queue.hpp"

// Pre:  iss és un istringstream vàlid; q és una Queue<T> buida.
// Post: si el text comença per '[e1 e2 ... eN]', q conté els N elements
//       llegits i retorna cert; altrament retorna fals i q queda buida.
template <typename T>
bool read_queue(istringstream& iss, Queue<T>& q) {
	char c;
  bool ok = (iss >> c) and (c == '[');
  T x;
  while (ok and (iss >> c) and (c != ']')) {
		iss.putback(c);
		ok = (bool)(iss >> x);
		if (ok) q.push(x);
	}
	return ok;
}

// Pre:  iss és un istringstream vàlid; s és un set<T> buit.
// Post: si el text comença per '{s1 s2 ... sM}', s conté els M elements
//       llegits i retorna cert; altrament retorna fals i s queda buit.
template <typename T>
bool read_set(istringstream& iss, set<T>& s) {
	char c;
	bool ok = (iss >> c) and (c == '{');
	T x;
	while (ok and (iss >> c) and (c != '}')) {
		iss.putback(c);
		ok = (bool)(iss >> x);
		if (ok) s.insert(x);
	}
	return ok;
}
 
int main() {
	string line;
	// Inv: s'han processat tots els casos de prova llegits fins ara;
	//      per a cada cas, s'ha aplicat duplicate i imprès la cua resultant.
	while (getline(cin, line)) {
		istringstream iss(line);
		Queue<int> q;
		set<int> s;
		bool ok = read_queue(iss, q) and read_set(iss, s);
		if (ok) {
			q.duplicate(s);
			cout << q << endl;
		}
	}
}
