/* */ //#pragma comment(linker, "/STACK:16777216") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define y0 sdkfaslhagaklsldk #define y1 aasdfasdfasdf #define yn askfhwqriuperikldjk #define j1 assdgsdgasghsf #define tm sdfjahlfasfh #define lr asgasgash #define eps 1e-9 //#define M_PI 3.141592653589793 #define bs 2717401869ll #define bsize 256 #define right adsgasgadsg #define free adsgasdg #define MAG 10000 using namespace std; long n,m,tp,a,b; vector events; long w[1<<20],d[1<<20]; vector > > mem[1<<20]; long tt; long get(long x) { if (x==w[x]) return x; return get(w[x]); } int main(){ //freopen("evacuation.in","r",stdin); //freopen("evacuation.out","w",stdout); //freopen("C:/input.txt","r",stdin); //freopen("C:/output.txt","w",stdout); //ios_base::sync_with_stdio(0); //cin.tie(0); scanf("%ld%ld",&n,&m); //cin>>n>>m; for (int i=1;i<=n;i++) w[i]=i; for (int i=1;i<=m;i++) { // cin>>tp; mem[i].reserve(8); scanf("%ld",&tp); if (tp==3) { // cin>>a>>b; scanf("%ld%ld",&a,&b); if (get(a)==get(b)) puts("1"); else puts("0"); // else cout<<0<<"\n";//endl; } if (tp==1) { // cin>>a>>b; scanf("%ld%ld",&a,&b); events.push_back(i); long aa,bb; aa=get(a); bb=get(b); if (aa==bb)continue; a=aa; b=bb; if (d[a]>d[b]) swap(a,b); w[a]=b; mem[i].push_back(make_pair(1,make_pair(a,b))); if (d[a]==d[b]) mem[i].push_back(make_pair(2,make_pair(b,b))); } if (tp==2) { scanf("%ld",&a); for (;a;--a) { tt=events.back(); events.pop_back(); for (int j=0;j