// No.2111 Sum of Diff package main import ( "bufio" "fmt" "os" "strconv" "strings" ) func main() { sc := bufio.NewScanner(os.Stdin) sc.Buffer(make([]byte, 200_000*10+2), 200_000*10+2) sc.Scan() N, _ := strconv.Atoi(sc.Text()) sc.Scan() ss := strings.Split(sc.Text(), " ") sum := 0 for i, s := range ss { a, _ := strconv.Atoi(s) k := modpow(2, N-1-i, MOD) - modpow(2, i, MOD) v := (k * a % MOD) if v < 0 { v += MOD } sum = (sum + v) % MOD } fmt.Println(sum) } const MOD = 998244353 func modpow(a int, n int, mod int) int { m := 1 for n > 0 { if n&1 == 1 { m = (m * a) % mod } a = (a * a) % mod n >>= 1 } return m }