class Solution {
  private static final int[] EVEN = new int[] {0, 1};

  public long maximumValueSum(int[] nums, int k, int[][] edges) {
    int n = nums.length;
    long[][] dp = new long[n + 1][2];

    dp[n][0] = Integer.MIN_VALUE;
    dp[n][1] = 0;

    for (int i = n - 1; i >= 0; --i) {
      for (int even : EVEN) {
        var xor = dp[i + 1][even ^ 1] + (nums[i] ^ k);
        var skip = dp[i + 1][even] + nums[i];

        dp[i][even] = Math.max(xor, skip);
      }
    }

    return dp[0][1];
  }
}