using System.Collections; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; internal class Program { private const long mod = 998244353; private const long mod17 = 1000000007; private const long INF = mod17 * mod17; public static long mod_pow(long x, long n, long m = mod) { x %= m; if (x < 0) x += m; long res = 1; while (n > 0) { if ((n & 1) != 0) res = res * x % m; x = x * x % m; n >>= 1; } return res; } public struct perm { public List fact; public List factinv; public perm(int n) { fact = new List(n); factinv = new List(n); fact.Add(1); for (int i = 1; i < n; i++) { long val = fact.Last(); val = val * i % mod; fact.Add((int)val); } long las = fact.Last(); long cur = mod_pow(las, mod - 2); factinv.Add((int)cur); for (int i = n - 1; i > 0; i--) { long val = factinv.Last(); val = val * i % mod; factinv.Add((int)val); } factinv.Reverse(); } public int comb(int a, int b) { if (a < 0 || b < 0 || a < b) return 0; long res = fact[a]; res = res * factinv[b] % mod; res = res * factinv[a - b] % mod; return (int)res; } } public static void Main(string[] args) { var n = int.Parse(Console.ReadLine()); perm pm = new perm(n + 5); var a = getar(); long ans = 0; for (int i = 0; i < n; i++) { long coef = 1; if (i < n - 1) coef = mod_pow(2, n - 2 - i); coef = coef * a[i] % mod; long csum = 0; /*for (int j = 1; j <= i + 1; j++) { long val = pm.comb(i, j - 1); val = val * j % mod; csum += val; if (csum >= mod) csum -= mod; }*/ csum = 1; if (i > 0) { csum = i + 2; csum = csum * mod_pow(2, i - 1) % mod; } ans += csum * coef; ans %= mod; //Console.WriteLine(csum); } Console.WriteLine(ans); } public class lower_bound : IComparer where T : IComparable { public int Compare(T x, T y) { return 0 <= x.CompareTo(y) ? 1 : -1; } } public static List mkar(int n, T val) { List res = new List(n); for(int i=0;i