#include <bits/stdc++.h>
using namespace std;
#define read(type) readInt<type>() // Fast read
#define ll long long
#define nL "\n"
#define pb push_back
#define mk make_pair
#define pii pair<int, int>
#define a first
#define b second
#define vi vector<int>
#define all(x) (x).begin(), (x).end()
#define umap unordered_map
#define uset unordered_set
#define MOD 1000000007
#define imax INT_MAX
#define imin INT_MIN
#define exp 1e9
#define sz(x) (int((x).size()))
void solve() {
int boxNum, ops;
cin >> boxNum >> ops;
int ballNum = ops;
map<int, vector<int>> boxes;
for (auto i = 0; i < boxNum; i++) {
boxes[i].push_back(i);
}
for (auto i = 0; i < ops; i++) {
int type, x, y;
cin >> type >> x;
if (type == 1) {
cin >> y;
for (auto j = 0; j < boxes[y].size(); j++) {
int val = boxes[y][j];
boxes[y].erase(boxes[y].begin() + j);
boxes[x].push_back(val);
}
} else if (type == 2) {
int ball = ballNum+1;
ballNum++;
boxes[x].push_back(ball);
} else {
for (auto const& dataPair : boxes) {
for (auto j=0; j < dataPair.second.size(); j++) {
if (dataPair.second[j] == x) {cout << x << endl;}
}
}
}
}
}
int32_t main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgcmVhZCh0eXBlKSByZWFkSW50PHR5cGU+KCkgLy8gRmFzdCByZWFkCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbkwgIlxuIgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1rIG1ha2VfcGFpcgojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIGEgZmlyc3QKI2RlZmluZSBiIHNlY29uZAojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCAoeCkuZW5kKCkKI2RlZmluZSB1bWFwIHVub3JkZXJlZF9tYXAKI2RlZmluZSB1c2V0IHVub3JkZXJlZF9zZXQKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwojZGVmaW5lIGltYXggSU5UX01BWAojZGVmaW5lIGltaW4gSU5UX01JTgojZGVmaW5lIGV4cCAxZTkKI2RlZmluZSBzeih4KSAoaW50KCh4KS5zaXplKCkpKQoKdm9pZCBzb2x2ZSgpIHsKICAgIGludCBib3hOdW0sIG9wczsKICAgIGNpbiA+PiBib3hOdW0gPj4gb3BzOwoKICAgIGludCBiYWxsTnVtID0gb3BzOwoKICAgIG1hcDxpbnQsIHZlY3RvcjxpbnQ+PiBib3hlczsKICAgIGZvciAoYXV0byBpID0gMDsgaSA8IGJveE51bTsgaSsrKSB7CiAgICAgICAgYm94ZXNbaV0ucHVzaF9iYWNrKGkpOwogICAgfQoKICAgIGZvciAoYXV0byBpID0gMDsgaSA8IG9wczsgaSsrKSB7CiAgICAgICAgaW50IHR5cGUsIHgsIHk7CiAgICAgICAgY2luID4+IHR5cGUgPj4geDsKCiAgICAgICAgaWYgKHR5cGUgPT0gMSkgewogICAgICAgICAgICBjaW4gPj4geTsKICAgICAgICAgICAgZm9yIChhdXRvIGogPSAwOyBqIDwgYm94ZXNbeV0uc2l6ZSgpOyBqKyspIHsKICAgICAgICAgICAgICAgIGludCB2YWwgPSBib3hlc1t5XVtqXTsKICAgICAgICAgICAgICAgIGJveGVzW3ldLmVyYXNlKGJveGVzW3ldLmJlZ2luKCkgKyBqKTsKICAgICAgICAgICAgICAgIGJveGVzW3hdLnB1c2hfYmFjayh2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IDIpIHsKICAgICAgICAgICAgaW50IGJhbGwgPSBiYWxsTnVtKzE7CiAgICAgICAgICAgIGJhbGxOdW0rKzsKICAgICAgICAgICAgYm94ZXNbeF0ucHVzaF9iYWNrKGJhbGwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZvciAoYXV0byBjb25zdCYgZGF0YVBhaXIgOiBib3hlcykgewogICAgICAgICAgICAgICAgZm9yIChhdXRvIGo9MDsgaiA8IGRhdGFQYWlyLnNlY29uZC5zaXplKCk7IGorKykgewogICAgICAgICAgICAgICAgICAgIGlmIChkYXRhUGFpci5zZWNvbmRbal0gPT0geCkge2NvdXQgPDwgeCA8PCBlbmRsO30KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgCiAgICB9Cn0KCgppbnQzMl90IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0=