func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long N = 1e5 + 10;   long long n, Mx, B[N], S[N];   struct Node {     int32_t l, r, c;     Node() { l = r = c = 0; }   };   struct BST {     long long L = 32;     vector<Node> A;     BST(long long _L = 32) {       L = _L, A.clear();       A.push_back(Node());     }     void Add(long long val, long long w = 1) {       long long id = 0;       for (long long i = L - 1; ~i; i--) {         A[id].c += w;         if (val & (1ll << i)) {           if (!A[id].r) A[id].r = A.size(), A.push_back(Node());           id = A[id].r;           continue;         }         if (!A[id].l) A[id].l = A.size(), A.push_back(Node());         id = A[id].l;       }       A[id].c += w;     }     long long MaxXor(long long val) {       long long id = 0, ret = 0;       if (!A[id].c) return (-1);       for (long long i = L - 1; ~i; i--) {         if (A[id].r && (!A[id].l || !(val & (1ll << i))))           ret |= (1ll << i), id = A[id].r;         else           id = A[id].l;       }       return (ret);     }   };   int32_t main() {     scanf( %lld , &n);     BST T = BST(43);     T.Add(0);     for (long long i = 1; i <= n; i++) scanf( %lld , &B[i]);     for (long long i = n; i; i--) S[i] = S[i + 1] ^ B[i], T.Add(S[i]);     for (long long i = 0, r = 0; i <= n; i++, r ^= B[i])       Mx = max(Mx, T.MaxXor(r) ^ r), T.Add(S[i + 1], -1);     return !printf( %lld , Mx);   }   