func_code_string: #include <bits/stdc++.h>   using namespace std;   long long ans, p, s;   int N;   struct node {     int a[2];     node *L, *R;     node() {       a[0] = a[1] = 0;       L = R = NULL;     }     void add() {       if (L == NULL) L = new node();       if (R == NULL) R = new node();     }   };   void update(node *no, long long x, int h, int inc) {     no->add();     if (h < 0) return;     if (!(x & (1LL << h)))       no->a[0]++, update(no->L, x, h - 1, inc);     else       no->a[1]++, update(no->R, x, h - 1, inc);   }   long long query(node *no, long long x, int h) {     if (h < 0) return 0;     no->add();     if (!(x & (1LL << h)) && no->a[1]) return (1LL << h) + query(no->R, x, h - 1);     if ((x & (1LL << h)) && no->a[0]) return (1LL << h) + query(no->L, x, h - 1);     if (no->a[0]) return query(no->L, x, h - 1);     if (no->a[1]) return query(no->R, x, h - 1);     return 0LL;   }   int main(int argc, char **argv) {     node *no;     no = new node();     scanf( %d , &N);     vector<long long> a(N);     for (auto &x : a) scanf( %I64d , &x);     update(no, s, 42, 1);     for (int i = (N - 1); i >= (0); i--) {       s ^= a[i];       ans = max(ans, s);       update(no, s, 42, 1);     }     for (int i = (0); i < (N); i++) {       p ^= a[i];       s ^= a[i];       update(no, s, 42, -1);       ans = max(ans, query(no, p, 42));       ans = max(ans, p);     }     printf( %I64d n , ans);     return 0;   }   