, (1) (2) , .
, solve(arr, n, ans) , ans < 1024, n < 1000000 arr = array[n]. dp[n][ans], , , dp dp = array[n+1][1024]. . , memset(dp, -1, sizeof(dp)), , dp[0][0] = 1
solve(arr, n, ans):
if (dp[n][ans] == -1)
if (n == 0) // and ans != 0 since that was initialized already
dp[n][ans] = 0
else
// combine results with current and without current array element
dp[n][ans] = solve(arr + 1, n - 1, ans) + solve(arr + 1, n - 1, ans XOR arr[0])
return dp[n][ans]
, dp , .
n