The XOR total of an array is defined as the bitwise XOR of all its elements, or 0 if the array is empty.


	For example, the XOR total of the array [2,5,6] is 2 XOR 5 XOR 6 = 1.


Given an array nums, return the sum of all XOR totals for every subset of nums.&nbsp;

Note: Subsets with the same elements should be counted multiple times.

An array a is a subset of an array b if a can be obtained from b by deleting some (possibly zero) elements of b.

&nbsp;
Example 1:

Input: nums = [1,3]
Output: 6
Explanation: The 4 subsets of [1,3] are:
- The empty subset has an XOR total of 0.
- [1] has an XOR total of 1.
- [3] has an XOR total of 3.
- [1,3] has an XOR total of 1 XOR 3 = 2.
0 + 1 + 3 + 2 = 6


Example 2:

Input: nums = [5,1,6]
Output: 28
Explanation: The 8 subsets of [5,1,6] are:
- The empty subset has an XOR total of 0.
- [5] has an XOR total of 5.
- [1] has an XOR total of 1.
- [6] has an XOR total of 6.
- [5,1] has an XOR total of 5 XOR 1 = 4.
- [5,6] has an XOR total of 5 XOR 6 = 3.
- [1,6] has an XOR total of 1 XOR 6 = 7.
- [5,1,6] has an XOR total of 5 XOR 1 XOR 6 = 2.
0 + 5 + 1 + 6 + 4 + 3 + 7 + 2 = 28


Example 3:

Input: nums = [3,4,5,6,7,8]
Output: 480
Explanation: The sum of all XOR totals for every subset is 480.


&nbsp;
Constraints:


	1 &lt;= nums.length &lt;= 12
	1 &lt;= nums[i] &lt;= 20


class Solution:
    def subsetXORSum(self, nums: List[int]) -> int:
        def sums(term, idx):
            if idx == len(nums):
                return term
            return sums(term, idx + 1) + sums(term ^ nums[idx], idx + 1)

        return sums(0, 0)
class Solution {
    int sum=0;
    public int subsetXORSum(int[] nums) {
        sum=0;
        return getAns(nums,0,0);
    }
    
    int getAns(int[] arr,int i,int cur){
        if(i==arr.length){
            return cur;
        }
        return getAns(arr,i+1,cur^arr[i]) + getAns(arr,i+1,cur);
    }
}
class Solution {
public:

    int subsetXORSum(vector<int>& nums)
    {
        int ans=0;
        for(int i=0; i<32; i++)
        {
            int mask=1<<i;
            int count=0;
            for(int j=0; j<nums.size(); j++)
            {
                if(nums[j]&mask) count++;
            }
            if(count)
            {
                ans+=mask*(1<<(count-1))*(1<<(nums.size()-count));
            }
        }
        return ans;
    }
};
var subsetXORSum = function(nums) {
    let output=[];
    backtrack();
    return output.reduce((a,b)=>a+b);
    function backtrack(start = 0, arr=[nums[0]]){
       output.push([...arr].reduce((a,b)=>a^b,0));
       for(let i=start; i<nums.length; i++){
            arr.push(nums[i]);
            backtrack(i+1, arr);
            arr.pop();
       }
    }
};
Sum of All Subset XOR Totals