#include #include #include #include #include #include #include using namespace std; #define int long long #define endl "\n" constexpr long long INF = (long long)1e18; constexpr long long MOD = 1'000'000'007; struct fast_io { fast_io(){ std::cin.tie(nullptr); std::ios::sync_with_stdio(false); }; } fio; vector i2g; vector> g2i; vector gnum; vector num; void init(int n) { i2g.resize(n); g2i.resize(n); for (int i = 0; i < n; ++i) { i2g[i] = i; g2i[i].push_back(i); } } void marge(int ia, int ib) { if(i2g[ia] == i2g[ib])return; if (g2i[i2g[ia]].size() < g2i[i2g[ib]].size()) { swap(ia, ib); } int ga = i2g[ia], gb = i2g[ib]; for (int j : g2i[gb]){ i2g[j] = ga; num[j] += gnum[gb] - gnum[ga]; } g2i[ga].insert(g2i[ga].end(), g2i[gb].begin(), g2i[gb].end()); g2i[gb].clear(); } bool same(int ia, int ib) { return i2g[ia] == i2g[ib]; } signed main(){ cout<>N>>Q; num.resize(N); gnum.resize(N); i2g.resize(N); g2i.resize(N); init(N); for(int i = 0; i < Q; i++){ int T, A, B; cin>>T>>A>>B; A--; if(T == 1) { B--; marge(A, B); } else if(T == 2) { gnum[i2g[A]] += B; } else if(T == 3) { cout<