#pragma GCC optimize("Ofast") #pragma GCC target("avx2") #include #define rd_int(var, tmp) \ for (;;) { \ tmp = getc_unlocked(stdin); \ if (tmp < '0' || tmp > '9') break; \ var = var * 10 + tmp - '0'; \ } #define wt_int(var, buf, ptr) \ while (var) { \ buf[ptr++] = var % 10; \ var /= 10; \ } \ while (ptr--) putc_unlocked(buf[ptr] + '0', stdout); // 998244353 int main() { long k, n = 0, a, ret = 0, ptr = 0; char buf[9]; rd_int(n, k); if (n == 1) { a = 0; rd_int(a, k); a %= 998244353; wt_int(a, buf, ptr); return 0; } for (int i = 0; i < n; ++i) { a = 0; rd_int(a, k); ret += a * (i + 2); if (ret >= 998244353) ret %= 998244353; } // int retcp = ret; // wt_int(retcp, buf, ptr); // ptr = 0; int t = n - 2; a = 2; while (t) { if (t & 1) { ret *= a; if (ret >= 998244353) ret %= 998244353; } t >>= 1, a *= a; if (a >= 998244353) a %= 998244353; } wt_int(ret, buf, ptr); _exit(0); // return 0; }