#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;
printf ( "Current type: %d\n " , type) ;
if ( type == 1 ) {
cin >> x >> 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) ;
printf ( "Removing ball %d in box %d\n " , val, y) ;
}
} else if ( type == 2 ) {
cin >> x;
int ball = ballNum+ 1 ;
ballNum++ ;
boxes[ x] .push_back ( ball) ;
printf ( "Adding new ball %d in box %d\n " , ball, x) ;
} else {
cin >> x;
printf ( "Checking for ball %d\n " , x) ;
for ( auto const & dataPair : boxes) {
for ( auto j= 0 ; j < dataPair.second .size ( ) ; j++ ) {
if ( dataPair.second [ j] == x) { cout << j+ 1 << endl; }
}
}
}
}
}
int32_t main( )
{
ios_base:: sync_with_stdio ( false ) ;
cin .tie ( NULL ) ;
solve( ) ;
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgcmVhZCh0eXBlKSByZWFkSW50PHR5cGU+KCkgLy8gRmFzdCByZWFkCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbkwgIlxuIgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1rIG1ha2VfcGFpcgojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIGEgZmlyc3QKI2RlZmluZSBiIHNlY29uZAojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCAoeCkuZW5kKCkKI2RlZmluZSB1bWFwIHVub3JkZXJlZF9tYXAKI2RlZmluZSB1c2V0IHVub3JkZXJlZF9zZXQKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwojZGVmaW5lIGltYXggSU5UX01BWAojZGVmaW5lIGltaW4gSU5UX01JTgojZGVmaW5lIGV4cCAxZTkKI2RlZmluZSBzeih4KSAoaW50KCh4KS5zaXplKCkpKQoKdm9pZCBzb2x2ZSgpIHsKICAgIGludCBib3hOdW0sIG9wczsKICAgIGNpbiA+PiBib3hOdW0gPj4gb3BzOwoKICAgIGludCBiYWxsTnVtID0gb3BzOwoKICAgIG1hcDxpbnQsIHZlY3RvcjxpbnQ+PiBib3hlczsKICAgIGZvciAoYXV0byBpID0gMDsgaSA8IGJveE51bTsgaSsrKSB7CiAgICAgICAgYm94ZXNbaV0ucHVzaF9iYWNrKGkpOwogICAgfQoKICAgIGZvciAoYXV0byBpID0gMDsgaSA8IG9wczsgaSsrKSB7CiAgICAgICAgaW50IHR5cGUsIHgsIHk7CiAgICAgICAgY2luID4+IHR5cGU7CiAgICAgICAgcHJpbnRmKCJDdXJyZW50IHR5cGU6ICVkXG4iLCB0eXBlKTsKICAgICAgICBpZiAodHlwZSA9PSAxKSB7CiAgICAgICAgICAgIGNpbiA+PiB4ID4+IHk7CiAgICAgICAgICAgIGZvciAoYXV0byBqID0gMDsgaiA8IGJveGVzW3ldLnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgICAgICBpbnQgdmFsID0gYm94ZXNbeV1bal07CiAgICAgICAgICAgICAgICBib3hlc1t5XS5lcmFzZShib3hlc1t5XS5iZWdpbigpICsgaik7CiAgICAgICAgICAgICAgICBib3hlc1t4XS5wdXNoX2JhY2sodmFsKTsKICAgICAgICAgICAgICAgIHByaW50ZigiUmVtb3ZpbmcgYmFsbCAlZCBpbiBib3ggJWRcbiIsIHZhbCwgeSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gMikgewogICAgICAgICAgICBjaW4gPj4geDsKICAgICAgICAgICAgaW50IGJhbGwgPSBiYWxsTnVtKzE7CiAgICAgICAgICAgIGJhbGxOdW0rKzsKICAgICAgICAgICAgYm94ZXNbeF0ucHVzaF9iYWNrKGJhbGwpOwogICAgICAgICAgICBwcmludGYoIkFkZGluZyBuZXcgYmFsbCAlZCBpbiBib3ggJWRcbiIsIGJhbGwsIHgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNpbiA+PiB4OwogICAgICAgICAgICBwcmludGYoIkNoZWNraW5nIGZvciBiYWxsICVkXG4iLCB4KTsKICAgICAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBkYXRhUGFpciA6IGJveGVzKSB7CiAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaj0wOyBqIDwgZGF0YVBhaXIuc2Vjb25kLnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFQYWlyLnNlY29uZFtqXSA9PSB4KSB7Y291dCA8PCBqKzEgPDwgZW5kbDt9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIAogICAgfQp9CgoKaW50MzJfdCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgc29sdmUoKTsKICAgIHJldHVybiAwOwp9