#include #include #include using namespace std; using ll = long long; int main() { ll n, q; scanf("%lld %lld", &n, &q); vector> gs(n); for (ll i = 0; i < n; i++) { gs[i] = {i}; } vector gn(n, 0), vn(n, 0), v2g(n); for (ll i = 0; i < n; i++) { v2g[i] = i; } for (ll k = 0; k < q; k++) { ll t, a, b; scanf("%lld %lld %lld", &t, &a, &b); if (t == 1) { a--; b--; if (v2g[a] == v2g[b]) { continue; } if (!(gs[v2g[a]].size() < gs[v2g[b]].size())) { swap(a, b); } ll i = v2g[a], j = v2g[b]; ll m_i = gn[i], m_j = gn[j]; vector ga = move(gs[i]); gs[i] = {}; for (ll v : ga) { v2g[v] = j; } for (ll v : ga) { vn[v] += m_i - m_j; } gs[j].insert(gs[j].end(), ga.begin(), ga.end()); } else if (t == 2) { a--; gn[v2g[a]] += b; } else { a--; printf("%lld\n", vn[a] + gn[v2g[a]]); } } }