Code:
#include <cstdio>
#include <algorithm>
#define M 60
#define N 60
#define ll long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
ll qpow(ll base,ll k,ll mod)
{
ll tmp=1;
for(;k;k>>=1,base=base*base%mod) if(k&1) tmp=tmp*base%mod;
return tmp;
}
int n,m,p[N*10];
ll d[N*10];
void insert(ll x)
{
for(int i=M;i>=0;--i)
{
if(x&(1ll<<i))
{
if(d[i]) x^=d[i];
else
{
d[i]=x;
break;
}
}
}
}
int main()
{
// setIO("input");
ll q,rk=0;
int i,j;
scanf("%d",&n);
for(i=1;i<=n;++i)
{
ll a;
scanf("%lld",&a), insert(a);
}
scanf("%lld",&q);
for(i=0;i<=M;++i) if(d[i]) p[m++]=i;
for(i=0;i<m;++i)
{
if(q&(1ll<<p[i]))
{
rk+=(1ll<<i);
}
}
printf("%lld\n",(qpow(2,n-m,10086)*rk%10086+1)%10086);
return 0;
}