/* Look at me! Look at me! Look at how large the monster inside me has become! */ #include<fstream> #include<iostream> #include<cstdio> #include<map> #include<set> #define FIT(a,b) for(vector<int >::iterator a=b.begin();a!=b.end();a++) #define FITP(a,b) for(vector<pair<int,int> >::iterator a=b.begin();a!=b.end();a++) #define RIT(a,b) for(vector<int>::reverse_iterator a=b.end();a!=b.begin();++a) #include<stack> #define ROF(a,b,c) for(int a=b;a>=c;--a) #include<vector> #include<algorithm> #define FOR(a,b,c) for(int a=b;a<=c;++a) #define REP(a,b) for(register int a=0;a<b;++a) #include<cstring> #include<ctime> #include<bitset> #include<cmath> #include<iomanip> #include<set> #define f cin #define g cout #include<queue> #define debug cerr<<"OK"; #define pii pair<int,int> #define mp make_pair #define pb push_back #define fi first #define se second #define ll long long #define ull unsigned long long #define mod 1000000009LL #define SQR 350 #define inf 1<<30 #define div fdasfasd #define hash dsafdsfds #define od 666013 #define mod 1000000007 #define DIM 60010000 #define N 100100 using namespace std; /* int dx[]={0,0,0,1,-1}; int dy[]={0,1,-1,0,0}; */ char s[DIM]; int buf; void go(int &x) { x=0; while(s[buf]<'0'||s[buf]>'9') ++buf; while(s[buf]<='9'&&s[buf]>='0') x=x*10+s[buf++]-'0'; } int T[N],R[N],Rx[N],t,xu[N],yu[N],Ry[N],Tx[N],Ty[N],n,x,y,tip,m; int find(int x) { int aux=x; while(x!=T[x]) { x=T[x]; } int tata=x; return tata; } void unite(int x,int y) { if(x==y) return ; if(R[x]==R[y]) ++R[x]; if(R[x]<R[y]) swap(x,y); T[y]=x; } int main () { #ifndef ONLINE_JUDGE freopen("a.in","r",stdin); freopen("a.out","w",stdout); #endif f.get(s,DIM,EOF); go(n); go(m); FOR(i,1,n) T[i]=i; FOR(i,1,m) { go(tip); if(tip==1) { go(x); go(y); x=find(x); y=find(y); ++t; xu[t]=x; yu[t]=y; Tx[t]=T[x]; Ty[t]=T[y]; Rx[t]=R[x]; Ry[t]=R[y]; unite(x,y); } else if(tip==2) { go(x); while(x) { T[xu[t]]=Tx[t]; T[yu[t]]=Ty[t]; R[xu[t]]=Rx[t]; R[yu[t]]=Ry[t]; --t; --x; } } else { go(x); go(y); x=find(x); y=find(y); if(x!=y) g<<"0\n"; else g<<"1\n"; } } return 0; }