import std; void main () { const long MOD = 998244353; int N = readln.chomp.to!int; auto A = readln.split.to!(int[]); foreach (i; 0 .. 10) { writefln("%05b", i); } // bitごとに考える const int B = 25; long ans = 0; foreach (b; 0 .. B) { int zero = N / (2 * (1 << b)) * (1 << b) + min(N % (2 * (1 << b)), 1 << b); int one = N - zero; // writeln(N / (2 * (1 << b))); // writefln("b: %s zero: %s one: %s", b, zero, one); long add = 0; foreach (i; 0 .. N) { int p = ((i >> b) & 1); int x = (p == 0 ? one : zero); add += 1L * (1 << b) * x % MOD * A[i] % MOD; add %= MOD; } ans += add; ans %= MOD; } writeln(ans); } void read (T...) (string S, ref T args) { import std.conv : to; import std.array : split; auto buf = S.split; foreach (i, ref arg; args) { arg = buf[i].to!(typeof(arg)); } }