func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 5e5 + 10;   int n, q, k;   vector<pair<int, int> > tree[N << 2];   int ask[N], ans[N];   struct que {     int x, y, times, l;   };   queue<que> Q;   int fa[N], h[N], siz[N];   int find(int o) {     if (o != fa[o]) {       return find(fa[o]);     }     return o;   }   struct gu {     int first, second, val;   };   gu merge(int x, int y) {     x = find(x);     y = find(y);     gu re;     re.val = -1;     if (x == y) return re;     if (h[x] > h[y]) swap(x, y);     fa[x] = y;     siz[y] += siz[x];     re.val = h[x] == h[y];     h[y] += h[x] == h[y];     re.first = x;     re.second = y;     return re;   }   void del(int x, int y, int val) {     h[y] -= val;     siz[y] -= siz[x];     fa[x] = x;   }   void add(int o, int l, int r, int L, int R, pair<int, int> x) {     if (l >= L && r <= R) {       tree[o].push_back(x);       return;     }     int mid = (l + r) >> 1;     if (mid >= L) add(o << 1, l, mid, L, R, x);     if (mid < R) add(o << 1 | 1, mid + 1, r, L, R, x);   }   int tp;   gu s[1000100];   void qu(int o, int l, int r) {     int now = tp, sf = 0;     for (int i = 0; i < tree[o].size(); ++i) {       pair<int, int> now = tree[o][i];       s[++tp] = merge(now.first, now.second);     }     if (l == r) {       ans[l] = siz[find(ask[l])];     } else {       int mid = (l + r) >> 1;       qu(o << 1, l, mid);       qu(o << 1 | 1, mid + 1, r);     }     while (tp != now) {       if (s[tp].val != -1) del(s[tp].first, s[tp].second, s[tp].val);       --tp;     }   }   int main() {     scanf( %d%d%d , &n, &q, &k);     for (int i = 1; i <= n; ++i) fa[i] = i, siz[i] = 1, h[i] = 1;     int days = 1;     for (int i = 1; i <= q; ++i) {       int op;       scanf( %d , &op);       if (op == 1) {         int x, y;         scanf( %d%d , &x, &y);         Q.push((que){x, y, days, i});       }       if (op == 2) {         int o;         scanf( %d , &o);         ask[i] = o;       }       if (op == 3) {         ++days;         while (!Q.empty() && Q.front().times <= days - k) {           add(1, 1, q, Q.front().l, i - 1, make_pair(Q.front().x, Q.front().y));           Q.pop();         }       }     }     while (!Q.empty()) {       add(1, 1, q, Q.front().l, q, make_pair(Q.front().x, Q.front().y));       Q.pop();     }     qu(1, 1, q);     for (int i = 1; i <= q; ++i) {       if (ask[i]) printf( %d n , ans[i]);     }   }   