#include<bits/stdc++.h>
using namespace std;
#define gc getchar_unlocked
#define fo(i,n) for(int i=0;i<n;i++)
#define Fo(i,k,n) for(int i = k ;i<=n;i++)
#define FO(i,n,k) for(int i = n;i>=k;i--)
#define ll long long
#define si(x) scanf("%d",&x)
#define sl(x) scanf("%lld",&x)
#define ss(s) scanf("%s",s)
#define pi(x) printf("%d\n",x)
#define pl(x) printf("%lld\n",x)
#define ps(s) printf("%s\n",s)
#define deb(x) cout << #x << "=" << x << endl
#define deb2(x, y) cout << #x << "=" << x << "," << #y << "=" << y << endl
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define clr(x) memset(x, 0, sizeof(x))
#define mems(a,x) memset(a,x,sizeof(a))
#define sortall(x) sort(all(x))
#define tr(it, a) for(auto it = a.begin(); it != a.end(); it++)
#define PI 3.1415926535897932384626
typedef pair<int, int> pii;
typedef pair<ll, ll> pl;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vpii;
typedef vector<pl> vpl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
mt19937_64 rang(chrono::high_resolution_clock::now().time_since_epoch().count());
int rng(int lim) {
uniform_int_distribution<int> uid(0, lim - 1);
return uid(rang);
}
const int mod = 998244353; //1000000007;
const int N = 3e5, M = N;
//vi g[N];
//int a[N];
ll find(vector<ll> &parent, ll a)
{
return (parent[a] = (parent[a] == a ? a : find(parent, parent[a])));
}
void Union(vector<ll> &parent, vector<ll> &parent2, vector<ll> &rank, vector<ll> &count, vector<ll> &sum, ll a, ll b)
{
a = find(parent, parent2[a]);
b = find(parent, parent2[b]);
if (a == b)
return;
if (rank[a] == rank[b])
{
rank[a]++;
}
if (rank[a] >= rank[b])
{
parent[b] = a;
sum[a] += sum[b];
count[a] += count[b];
}
else
{
parent[a] = b;
sum[b] += sum[a];
count[b] += count[a];
}
}
void move(vector<ll> &parent, vector<ll> &parent2, vector<ll> &count, vector<ll> &sum, ll a, ll b)
{
ll a1 = find(parent, parent2[a]);
b = find(parent, parent2[b]);
if (a1 == b)
return;
parent2[a] = b;
sum[b] += a;
count[b] += 1;
sum[a1] -= a;
count[a1] -= 1;
}
void solve()
{
ll n, m;
while (cin >> n >> m)
{
vector<ll> parent(n + 1), parent2(n + 1), count(n + 1), sum(n + 1), rank(n + 1);
fo(i, n + 1)
{
parent[i] = i;
parent2[i] = i;
count[i] = 1;
sum[i] = i;
rank[i] = 0;
}
fo(i, m)
{
ll x, y, z;
cin >> x >> y;
if (x == 1)
{
cin >> z;
/* code */
Union(parent, parent2, rank, count, sum, y, z);
}
else if (x == 2)
{
cin >> z;
move(parent, parent2, count, sum, y, z);
}
else
{
y = find(parent, parent2[y]);
cout << count[y] << " " << sum[y] << endl;
}
}
}
}
int main() {
//ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
srand(chrono::high_resolution_clock::now().time_since_epoch().count());
int t = 1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBnYyBnZXRjaGFyX3VubG9ja2VkCiNkZWZpbmUgZm8oaSxuKSBmb3IoaW50IGk9MDtpPG47aSsrKQojZGVmaW5lIEZvKGksayxuKSBmb3IoaW50IGkgPSBrIDtpPD1uO2krKykKI2RlZmluZSBGTyhpLG4saykgZm9yKGludCBpID0gbjtpPj1rO2ktLSkKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBzaSh4KSAgIHNjYW5mKCIlZCIsJngpCiNkZWZpbmUgc2woeCkgICBzY2FuZigiJWxsZCIsJngpCiNkZWZpbmUgc3MocykgICBzY2FuZigiJXMiLHMpCiNkZWZpbmUgcGkoeCkgICBwcmludGYoIiVkXG4iLHgpCiNkZWZpbmUgcGwoeCkgICBwcmludGYoIiVsbGRcbiIseCkKI2RlZmluZSBwcyhzKSAgIHByaW50ZigiJXNcbiIscykKI2RlZmluZSBkZWIoeCkgY291dCA8PCAjeCA8PCAiPSIgPDwgeCA8PCBlbmRsCiNkZWZpbmUgZGViMih4LCB5KSBjb3V0IDw8ICN4IDw8ICI9IiA8PCB4IDw8ICIsIiA8PCAjeSA8PCAiPSIgPDwgeSA8PCBlbmRsCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSwgeC5lbmQoKQojZGVmaW5lIGNscih4KSBtZW1zZXQoeCwgMCwgc2l6ZW9mKHgpKQojZGVmaW5lIG1lbXMoYSx4KSBtZW1zZXQoYSx4LHNpemVvZihhKSkKI2RlZmluZSBzb3J0YWxsKHgpIHNvcnQoYWxsKHgpKQojZGVmaW5lIHRyKGl0LCBhKSBmb3IoYXV0byBpdCA9IGEuYmVnaW4oKTsgaXQgIT0gYS5lbmQoKTsgaXQrKykKI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjYKdHlwZWRlZiBwYWlyPGludCwgaW50PiAgcGlpOwp0eXBlZGVmIHBhaXI8bGwsIGxsPiAgICBwbDsKdHlwZWRlZiB2ZWN0b3I8aW50PiAgICAgdmk7CnR5cGVkZWYgdmVjdG9yPGxsPiAgICAgIHZsOwp0eXBlZGVmIHZlY3RvcjxwaWk+ICAgICB2cGlpOwp0eXBlZGVmIHZlY3RvcjxwbD4gICAgICB2cGw7CnR5cGVkZWYgdmVjdG9yPHZpPiAgICAgIHZ2aTsKdHlwZWRlZiB2ZWN0b3I8dmw+ICAgICAgdnZsOwptdDE5OTM3XzY0IHJhbmcoY2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpKTsKaW50IHJuZyhpbnQgbGltKSB7CiAgICB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248aW50PiB1aWQoMCwgbGltIC0gMSk7CiAgICByZXR1cm4gdWlkKHJhbmcpOwp9CmNvbnN0IGludCBtb2QgPSAgIDk5ODI0NDM1MzsgLy8xMDAwMDAwMDA3Owpjb25zdCBpbnQgTiA9IDNlNSwgTSA9IE47CgovL3ZpIGdbTl07Ci8vaW50IGFbTl07CgpsbCBmaW5kKHZlY3RvcjxsbD4gJnBhcmVudCwgbGwgYSkKewogICAgcmV0dXJuIChwYXJlbnRbYV0gPSAocGFyZW50W2FdID09IGEgPyBhIDogZmluZChwYXJlbnQsIHBhcmVudFthXSkpKTsKfQoKdm9pZCBVbmlvbih2ZWN0b3I8bGw+ICZwYXJlbnQsIHZlY3RvcjxsbD4gJnBhcmVudDIsIHZlY3RvcjxsbD4gJnJhbmssIHZlY3RvcjxsbD4gJmNvdW50LCB2ZWN0b3I8bGw+ICZzdW0sIGxsIGEsIGxsIGIpCnsKCiAgICBhID0gZmluZChwYXJlbnQsIHBhcmVudDJbYV0pOwoKICAgIGIgPSBmaW5kKHBhcmVudCwgcGFyZW50MltiXSk7CgoKICAgIGlmIChhID09IGIpCiAgICAgICAgcmV0dXJuOwoKICAgIGlmIChyYW5rW2FdID09IHJhbmtbYl0pCiAgICB7CiAgICAgICAgcmFua1thXSsrOwogICAgfQoKICAgIGlmIChyYW5rW2FdID49IHJhbmtbYl0pCiAgICB7CiAgICAgICAgcGFyZW50W2JdID0gYTsKICAgICAgICBzdW1bYV0gKz0gc3VtW2JdOwogICAgICAgIGNvdW50W2FdICs9IGNvdW50W2JdOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHBhcmVudFthXSA9IGI7CiAgICAgICAgc3VtW2JdICs9IHN1bVthXTsKICAgICAgICBjb3VudFtiXSArPSBjb3VudFthXTsKICAgIH0KfQoKdm9pZCBtb3ZlKHZlY3RvcjxsbD4gJnBhcmVudCwgdmVjdG9yPGxsPiAmcGFyZW50MiwgdmVjdG9yPGxsPiAmY291bnQsIHZlY3RvcjxsbD4gJnN1bSwgbGwgYSwgbGwgYikKewogICAgbGwgYTEgPSBmaW5kKHBhcmVudCwgcGFyZW50MlthXSk7CgogICAgYiA9IGZpbmQocGFyZW50LCBwYXJlbnQyW2JdKTsKCiAgICBpZiAoYTEgPT0gYikKICAgICAgICByZXR1cm47CgogICAgcGFyZW50MlthXSA9IGI7CgogICAgc3VtW2JdICs9IGE7CiAgICBjb3VudFtiXSArPSAxOwoKICAgIHN1bVthMV0gLT0gYTsKICAgIGNvdW50W2ExXSAtPSAxOwoKfQoKdm9pZCBzb2x2ZSgpCnsKICAgIGxsIG4sIG07CiAgICB3aGlsZSAoY2luID4+IG4gPj4gbSkKICAgIHsKICAgICAgICB2ZWN0b3I8bGw+IHBhcmVudChuICsgMSksIHBhcmVudDIobiArIDEpLCBjb3VudChuICsgMSksIHN1bShuICsgMSksIHJhbmsobiArIDEpOwogICAgICAgIGZvKGksIG4gKyAxKQogICAgICAgIHsKICAgICAgICAgICAgcGFyZW50W2ldID0gaTsKICAgICAgICAgICAgcGFyZW50MltpXSA9IGk7CiAgICAgICAgICAgIGNvdW50W2ldID0gMTsKICAgICAgICAgICAgc3VtW2ldID0gaTsKICAgICAgICAgICAgcmFua1tpXSA9IDA7CiAgICAgICAgfQoKICAgICAgICBmbyhpLCBtKQogICAgICAgIHsKICAgICAgICAgICAgbGwgeCwgeSwgejsKICAgICAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICAgICAgaWYgKHggPT0gMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2luID4+IHo7CiAgICAgICAgICAgICAgICAvKiBjb2RlICovCiAgICAgICAgICAgICAgICBVbmlvbihwYXJlbnQsIHBhcmVudDIsIHJhbmssIGNvdW50LCBzdW0sIHksIHopOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHggPT0gMikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2luID4+IHo7CiAgICAgICAgICAgICAgICBtb3ZlKHBhcmVudCwgcGFyZW50MiwgY291bnQsIHN1bSwgeSwgeik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB5ID0gZmluZChwYXJlbnQsIHBhcmVudDJbeV0pOwogICAgICAgICAgICAgICAgY291dCA8PCBjb3VudFt5XSA8PCAiICIgPDwgc3VtW3ldIDw8IGVuZGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgLy9pb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApLCBjaW4udGllKDApLCBjb3V0LnRpZSgwKTsKICAgIHNyYW5kKGNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKS50aW1lX3NpbmNlX2Vwb2NoKCkuY291bnQoKSk7CgogICAgaW50IHQgPSAxOwogICAgLy8gY2luID4+IHQ7CiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoK