#include <bits/stdc++.h>   using namespace std;   const int maxn = 1010;   int N;   long long c[4][maxn][maxn];   void upd(int p, int i, int j, long long x) {     int jj = j;     while (i <= N) {       j = jj;       while (j <= N) c[p][i][j] ^= x, j += j & (-j);       i += i & (-i);     }   }   long long get(int p, int i, int j) {     int jj = j;     long long ans = 0;     while (i) {       j = jj;       while (j) ans ^= c[p][i][j], j -= j & (-j);       i -= i & (-i);     }     return ans;   }   void upd(int i, int j, long long x) {     upd(0, i, j, x);     upd(1, i, j, x * (i % 2));     upd(2, i, j, x * (j % 2));     upd(3, i, j, x * (i % 2) * (j % 2));   }   long long get(int i, int j) {     long long s0 = get(0, i, j);     long long s1 = get(1, i, j);     long long s2 = get(2, i, j);     long long s3 = get(3, i, j);     int x = i, y = j;     x++, y++;     x %= 2, y %= 2;     return (x * y * s0) ^ (y * s1) ^ (x * s2) ^ (s3);   }   int main() {     int n, m, i, j, k;     int x0, x1, y0, y1;     scanf( %d%d , &n, &m);     N = n;     while (m--) {       scanf( %d , &i);       if (i == 1) {         scanf( %d%d%d%d , &x0, &y0, &x1, &y1);         printf( %I64d n , get(x1, y1) ^ get(x0 - 1, y1) ^ get(x1, y0 - 1) ^                               get(x0 - 1, y0 - 1));       } else {         scanf( %d%d%d%d , &x0, &y0, &x1, &y1);         long long v;         scanf( %I64d , &v);         upd(x0, y0, v);         upd(x0, y1 + 1, v);         upd(x1 + 1, y0, v);         upd(x1 + 1, y1 + 1, v);       }     }   }   