异或和
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

总所周知,jbgg 不会数学,一天 jbgg 求着磊神教他位运算,磊神就给了一个长度为 n 的非负整数序列 。磊神会随便挑几个下标,jbgg 需要说出对应下标的数字异或后的数。只选择一个下标时,异或结果为它本身。

假设磊神给出的序列 ,磊神选择下标 1,2,5,那么 jbgg 需要给出对应的结果

由于 jbgg 太笨了,每次都答错,于是愤怒的磊神要求 jbgg 算出所有不同下标选法的结果把它们加起来,但 jbgg 想快点回去打音游,你能帮帮 jbgg 吗?

两种下标的选法不同,当且仅当两种选法中至少有一个下标不同。

由于答案可能很大,你只需要输出答案对 998244353 取模的结果。

输入描述:

第一行包含一个正整数 n ,表示序列  的长度。

第二行包含 n 个整数

输出描述:

输出一个整数, 为你的答案对 998244353 取模的结果。
示例1

输入

复制
3
3 5 2

输出

复制
28
示例2

输入

复制
2
114514 1919810

输出

复制
3931812
示例3

输入

复制
5
1 2 3 4 5

输出

复制
112

备注:

异或:对于 ,若 ab 二进制下对应 bit 位不同,则为 1,否则为 0。在 C 语言中,用  来表示。

比如