#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
typedef long long Int;

int groupid[100111];
Int sum[100111];
int sz[100111];
int n,m;

vector<int> group[100111];

void Union(int a,int b) ///Operation 1
{
    int r1=groupid[a];
    int r2=groupid[b];
    int swp,i;

    if (r1==r2)
    return;

    if (group[r2].size()>group[r1].size()) ///Make sure we're iterating the smaller group
    {
        swp=r1;
        r1=r2;
        r2=swp;
    }

    for (i=0;i<group[r2].size();i++)
    {
        if ( groupid[ group[r2][i] ]==r2 ) ///Check whether the element is not a leftover
        {
            group[r1].push_back(group[r2][i]); ///Add it to the new group
            groupid[ group[r2][i] ]=r1; ///Remember that it's in the new group
        }
    }

    sum[r1]+=sum[r2]; ///Update new group values
    sz[r1]+=sz[r2];

    return;
}

void Move(int a,int b) ///Operation 2
{
    int r1=groupid[a];
    int r2=groupid[b];

    if (r1==r2)
    return;

    sz[r1]--;
    sum[r1]-=(Int)a; ///Update old group values

    sz[r2]++;
    sum[r2]+=(Int)a; ///Update new group values

    group[r2].push_back(a); ///Add a to the new group

    groupid[a]=r2; ///Update a's group so that we don't mix it with the leftover

    return;
}

int main()
{
    int i,j;
    int cm,a,b;

    while(scanf("%d %d",&n,&m)==2)
    {
        for (i=1;i<=n;i++) ///Initialise every element to be in its own group
        {
            groupid[i]=i;
            sz[i]=1;
            sum[i]=i;

            group[i].clear();
            group[i].push_back(i);
        }

        for (i=1;i<=m;i++)
        {
            scanf("%d",&cm);

            if (cm==1)
            {
                scanf("%d %d",&a,&b);

                Union(a,b);
            }
            else if (cm==2)
            {
                scanf("%d %d",&a,&b);

                Move(a,b);
            }
            else
            {
                scanf("%d",&a);

                printf("%d %lld\n",sz[ groupid[a] ],sum[ groupid[a] ]);
            }
        }
    }

    return 0;
}
