#include <iostream>
struct Node {
int data;
Node* next;
Node(int data) : data(data), next(nullptr) {}
};
class LinkedList {
private:
Node* head;
public:
LinkedList(int data) : head(new Node(data)) {}
void addNode(int data1, int data2) {
Node* newNode = new Node(data2);
Node* tNode = head;
while (tNode->next != nullptr) {
if (tNode->data == data1) {
newNode->next = tNode->next;
tNode->next = newNode;
return;
}
tNode = tNode->next;
}
if (tNode->data == data1) {
tNode->next = newNode;
}
}
void removeNode(int data) {
Node* tNode = head;
Node* pre = head;
while (tNode->next != nullptr) {
if (tNode->data == data) {
pre = tNode;
tNode = tNode->next;
pre->next = tNode->next;
delete tNode;
return;
}
tNode = tNode->next;
}
}
void checkNode(int data) {
Node* check = head;
while (check->next != nullptr) {
if (check->data == data) {
std::cout << check->next->data << "\n";
return;
}
check = check->next;
}
if (check->data == data) {
std::cout << 0 << "\n";
return;
}
}
};
int main() {
int times;
LinkedList list(1);
std::cin >> times;
for (int i = 0; i < times; i++) {
int choice;
std::cin >> choice;
switch (choice) {
case 1:
int data1, data2;
std::cin >> data1;
std::cin >> data2;
list.addNode(data1, data2);
break;
case 2:
int data;
std::cin >> data;
list.checkNode(data);
break;
case 3:
data;
std::cin >> data;
list.removeNode(data);
break;
}
}
return 0;
}