class Solution {
    private fun xorSum(
        nums: IntArray,
        i: Int,
        sum: Int,
    ): Int {
        if (i == nums.size) {
            return sum
        }

        val including = xorSum(nums, i + 1, sum xor nums[i])
        val excluding = xorSum(nums, i + 1, sum)

        return including + excluding
    }

    fun subsetXORSum(nums: IntArray): Int = xorSum(nums, 0, 0)
}