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

using namespace std;

template <typename T>
void apply_rotations(list<T>& data, const list<int>& rotations);

#ifndef IOLISTFUNCTIONS
#define IOLISTFUNCTIONS

// Pre:  iss és un istringstream vàlid posicionat sobre el text a llegir.
//       lst és una list<T> buida.
// Post: si el text comença per '[e1 e2 ... eN]', lst conté els N elements
//       llegits i retorna cert; altrament retorna fals i lst queda buida.
template <typename T>
bool read_list(istringstream& iss, list<T>& lst) {
	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) lst.push_back(x);
	}
	return ok;
}

template<typename T1, typename T2>
ostream& operator<<(ostream &os, const pair<T1,T2> &x) {
	os << '<' << x.first << ',' << x.second << '>';
	return os;
}	

// Pre:  it i end són iteradors vàlids de la mateixa llista, amb it <= end.
// Post: ha escrit per cout ", x" per cada element x del rang [it, end),
//       en ordre, sense salt de línia final.
template <typename T>
void write_list_rec(typename list<T>::const_iterator it, typename list<T>::const_iterator end) {
	if (it != end) {
		cout << ", " << (*it);
		write_list_rec<T>(++it, end);
	}
}

// Pre:  l = L
// Post: ha escrit per cout L en format [e1, e2, ..., eN];
//       si l és buida escriu [].
template <typename T>
void write_list(const list<T> &l) {
	if (l.empty()) {
		cout << "[]" << endl;
	}
	else {
		cout << '[' << (*l.begin());
		write_list_rec<T>(++l.begin(), l.end());
		cout << ']';
	}
}

#endif

int main() {
	string line;
	while (getline(cin, line)) {
		istringstream iss(line);
		list<int> data;
		list<int> rotations;
		bool ok = read_list(iss, data) and read_list(iss, rotations);
		if (ok) {
			apply_rotations(data, rotations);
			write_list(data);
			cout << endl;
		}
	}
}
