#include using namespace std; template struct Node { T element; Node* next; Node(const T& e, Node* n = nullptr) : element(e), next(n) {} }; template class Chain { private: Node* head; int size; public: Chain() : head(nullptr), size(0) {} ~Chain() { while (head != nullptr) { Node* tmp = head; head = head->next; delete tmp; } } void insert(int pos, const T& e) { if (pos < 0 || pos > size) { throw invalid_argument("Invalid insert position"); } if (pos == 0) { head = new Node(e, head); } else { Node* prev = head; for (int i = 0; i < pos - 1; i++) { prev = prev->next; } prev->next = new Node(e, prev->next); } size++; } void erase(int pos) { if (pos < 0 || pos >= size) { throw invalid_argument("Invalid erase position"); } Node* toDelete; if (pos == 0) { toDelete = head; head = head->next; } else { Node* prev = head; for (int i = 0; i < pos - 1; i++) { prev = prev->next; } toDelete = prev->next; prev->next = toDelete->next; } delete toDelete; size--; } void print() const { Node* cur = head; while (cur != nullptr) { cout << cur->element << " "; cur = cur->next; } cout << endl; } }; int main(){ int n; cin >> n; Chain list; for (int i = 0; i < n; i++) { int x; cin >> x; try { list.insert(i, x); } catch(const invalid_argument& e) {} } int m; cin >> m; for (int i = 0; i < m; i++) { int op, k, d; cin >> op; if (op == 0) { cin >> k >> d; try { list.insert(k, d); } catch(const invalid_argument& e) {} } else if (op == 1) { cin >> k; try { list.erase(k - 1); } catch(const invalid_argument& e) {} } } list.print(); return 0; }