## https://yukicoder.me/problems/no/2061 MOD = 998244353 def solve(N, A): A.sort() groups = [(0, N)] answer = 1 for k in reversed(range(30)): is_changes = False new_groups = [] for low, high in groups: left = -1 right = -1 for i in range(low, high): if A[i] & (1 << k) == 0: if left == -1: left = i else: if right == -1: right = i if left != -1 and right != -1: is_changes = True new_groups.append((left, right)) new_groups.append((right, high)) elif left != -1: new_groups.append((left, high)) elif right != -1: new_groups.append((right, high)) if is_changes: answer *= 2 answer %= MOD groups = new_groups print(answer) def solve2(N, A): t_set = set() for x in range(100): B = [] for a in A: B.append(a ^ x) B.sort() ans = [] for b in B: ans.append(b ^ x) t_set.add(tuple(ans)) print(len(t_set)) def main(): N = int(input()) A = list(map(int, input().split())) solve(N, A) # solve2(N, A) if __name__ == "__main__": main()