#include using namespace std; int timer = 0; int Parent[200000], Rank[200000]; pair Ops[200000]; int Find(int a) { while(Parent[a]) a = Parent[a]; return a; } void Union(int a, int b) { timer += 1; a = Find(a); b = Find(b); if(a == b) { Ops[timer] = {0, 0}; } else { if(Rank[a] > Rank[b]) swap(a, b); Rank[b] += (Rank[a] == Rank[b]); Ops[timer] = {a, Parent[a]}; Parent[a] = b; } } void Undo() { Parent[Ops[timer].first] = Ops[timer].second; timer -= 1; } int main() { int n, m, a, b, t; cin >> n >> m; while(m --) { cin >> t; if(t == 1) { cin >> a >> b; Union(a, b); } if(t == 2) { cin >> a; for(int i = 1; i <= a; i += 1) Undo(); } if(t == 3) { cin >> a >> b; cout << (Find(a) == Find(b)) << '\n'; } } return 0; }