func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename Abel>   struct BIT2D {     vector<vector<Abel>> dat[4];     BIT2D(int h, int w) {       for (int which = 0; which < 4; which++)         dat[which].assign(h + 1, vector<Abel>(w + 1));     }     inline void sub_add(int which, int a, int b, Abel x) {       int h = dat[which].size(), w = dat[which][0].size();       for (int i = a; i < h; i += i & -i)         for (int j = b; j < w; j += j & -j) dat[which][i][j] += x;     }     inline void add(int si, int sj, Abel x) {       sub_add(0b00, si, sj, x * (si - 1) * (sj - 1));       sub_add(0b10, si, sj, -x * (si - 1));       sub_add(0b01, si, sj, -x * (sj - 1));       sub_add(0b11, si, sj, x);     }     inline void add(int si, int ti, int sj, int tj, Abel x) {       add(si, sj, x), add(si, tj, -x), add(ti, sj, -x), add(ti, tj, x);     }     inline Abel sub_sum(int which, int a, int b) {       Abel res = Abel(0);       for (int i = a; i > 0; i -= i & -i)         for (int j = b; j > 0; j -= j & -j) res += dat[which][i][j];       return res;     }     inline Abel sum(int si, int sj) {       Abel res = Abel(0);       res += sub_sum(0b00, si - 1, sj - 1);       res += sub_sum(0b10, si - 1, sj - 1) * (sj - 1);       res += sub_sum(0b01, si - 1, sj - 1) * (si - 1);       res += sub_sum(0b11, si - 1, sj - 1) * (si - 1) * (sj - 1);       return res;     }     inline Abel sum(int si, int ti, int sj, int tj) {       return sum(ti, tj) - sum(si, tj) - sum(ti, sj) + sum(si, sj);     }   };   struct Xor {     long long val;     Xor(long long val_ = 0) : val(val_) {}     Xor operator=(long long val_) {       this->val = val_;       return *this;     }     Xor operator-() { return val; }     const Xor &operator+=(const Xor &x);     const Xor &operator-=(const Xor &x);     friend ostream &operator<<(ostream &os, const Xor &a) { return os << a.val; }   };   Xor operator+(Xor x, Xor y) { return x.val ^ y.val; }   Xor operator-(Xor x, Xor y) { return x.val ^ y.val; }   Xor operator*(Xor x, int p) { return p & 1 ? x : 0; }   const Xor &Xor::operator+=(const Xor &x) { return *this = *this + x; }   const Xor &Xor::operator-=(const Xor &x) { return *this = *this - x; }   int main() {     cin.tie(nullptr);     ios::sync_with_stdio(false);     int n, m;     cin >> n >> m;     BIT2D<Xor> bit(n, n);     while (m--) {       int op;       cin >> op;       int si, sj, ti, tj;       cin >> si >> sj >> ti >> tj;       if (op == 1) {         cout << bit.sum(si, ti + 1, sj, tj + 1) << endl;       }       if (op == 2) {         long long v;         cin >> v;         bit.add(si, ti + 1, sj, tj + 1, v);       }     }     return 0;   }   