/* -*- coding: utf-8 -*- * * 3662.cc: No.3662 yuu Hates Sigma Problem - yukicoder */ #include #include using namespace std; /* constant */ const int MAX_N = 500000; const int BN = 19; const int MOD = 998244353; /* typedef */ using ll = long long; /* global variables */ int as[MAX_N], cs[BN][2]; /* subroutines */ /* main */ int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", as + i); //printf(" n=%d\n", n); for (int i = 0; i < BN; i++) { int b0 = (1 << i), b1 = (1 << (i + 1)); int q = n / b1, r = n % b1; cs[i][0] = q * b0 + min(r, b0); cs[i][1] = q * b0 + max(0, r - b0); //printf(" cs[%d]=%d,%d\n", i, cs[i][0], cs[i][1]); } int sum = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < BN; j++) { int bj = (i >> j) & 1; int sj = (ll)as[i] * (1 << j) % MOD * cs[j][bj ^ 1] % MOD; sum = (sum + sj) % MOD; } } printf("%d\n", sum); return 0; }