Powerful Ksenia (Codeforces 1438D)
Tags: Math, bitmasks

Ksenia has an array $$$a$$$ consisting of $$$n$$$ positive integers $$$a_1, a_2, \ldots, a_n$$$. In one operation she can do the following:   choose three distinct indices $$$i$$$, $$$j$$$, $$$k$$$, and then  change all of $$$a_i, a_j, a_k$$$ to $$$a_i \oplus a_j \oplus a_k$$$ simultaneously, where $$$\oplus$$$ denotes the bitwise XOR operation. She wants to make all $$$a_i$$$ equal in at most $$$n$$$ operations, or to determine that it is impossible to do so. She wouldn't ask for your help, but please, help her!

Input: The first line contains one integer $$$n$$$ ($$$3 \leq n \leq 10^5$$$) — the length of $$$a$$$.The second line contains $$$n$$$ integers, $$$a_1, a_2, \ldots, a_n$$$ ($$$1 \leq a_i \leq 10^9$$$) — elements of $$$a$$$.

Output: Print YES or NO in the first line depending on whether it is possible to make all elements equal in at most $$$n$$$ operations.If it is possible, print an integer $$$m$$$ ($$$0 \leq m \leq n$$$), which denotes the number of operations you do.In each of the next $$$m$$$ lines, print three distinct integers $$$i, j, k$$$, representing one operation. If there are many such operation sequences possible, print any. Note that you do not have to minimize the number of operations.

Note: In the first example, the array becomes $$$[4 \oplus 1 \oplus 7, 2, 4 \oplus 1 \oplus 7, 4 \oplus 1 \oplus 7, 2] = [2, 2, 2, 2, 2]$$$.

Sample Inputs:
5
4 2 1 7 2

4
10 4 49 22

Sample Outputs:
YES
1
1 3 4

NO

Solution (Python):
t = 1
while t > 0:
    t -= 1
    n = int(input())
    l = list(map(int, input().split()))
    flag = 1
    if n % 2 == 0:
        total = 0
        for i in range(n):
            total ^= l[i]
        if total != 0:
            flag = 0
            exit
        n -= 1
    if flag == 0:
        print('NO')
    else:
        print('YES')
        print(n - 1)
        for i in range((n - 1) // 2):
            print(1, 2 * i + 2, 2 * i + 3)
        for i in range((n - 1) // 2):
            print(1, 2 * i + 2, 2 * i + 3)

Solution (Python):
n = int(input())
arr = [int(_) for _ in input('').split()]
p = n // 2
if n % 2 == 0:
    p = (n - 1) // 2
xor = arr[0]
for i in range(1, n):
    xor ^= arr[i]
if n % 2 != 0 or (xor == 0 and n % 2 == 0):
    print('YES')
    print(2 * p - 1)
    a = 1
    for i in range(p):
        print(a, a + 1, a + 2)
        a += 2
    a -= 4
    for i in range(p - 1):
        print(a, a + 1, a + 2)
        a -= 2
else:
    print('NO')

Solution (Python):
""""""
n = int(input())
a = list(map(int, input().split()))
X = 0
for i in a:
    X = X ^ i
if n % 2 == 0 and X != 0:
    print('NO')
else:
    print('Yes')
    ans = []
    for i in range(3, n + 1, 2):
        ans.append([i - 2, i - 1, i])
    for i in range(2, n, 2):
        ans.append([i - 1, i, n])
    print(len(ans))
    for i in ans:
        print(*i)