← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func modPow(b, e, m int64) int64 {
	res := int64(1)
	b %= m
	for e > 0 {
		if e&1 == 1 {
			res = res * b % m
		}
		b = b * b % m
		e >>= 1
	}
	return res
}

func modInv(a, m int64) int64 {
	return modPow(a, m-2, m)
}

func main() {
	in := bufio.NewReader(os.Stdin)
	var N int64
	fmt.Fscan(in, &N)
	P := make([]int64, N+1)
	for i := int64(1); i <= N; i++ {
		fmt.Fscan(in, &P[i])
	}
	const MOD int64 = 998244353
	inv100 := modInv(100, MOD)
	current_const := int64(0)
	current_ce := int64(0)
	current_g := make(map[int64]int64)
	for hh := N - 1; hh >= 0; hh-- {
		x := hh + 1
		r := P[x] * inv100 % MOD
		q := (MOD + 1 - r) % MOD
		q_delta := q
		if x == N {
			q_delta = 0
		}
		var prob1 int64
		if x == 1 {
			prob1 = r
		} else {
			prob1 = r * q % MOD
		}
		d := (MOD + 1 - prob1) % MOD
		var const_u, ce_u int64
		u_g := make(map[int64]int64)
		if x == 1 {
		} else {
			p2 := modPow(r, 2, MOD)
			coeff_S := q * p2 % MOD
			mm := x - 2
			var pm int64 = 1
			if mm > 0 {
				pm = modPow(r, mm, MOD)
			}
			tmp := coeff_S * pm % MOD
			ce_u = ((MOD - tmp) + modPow(r, x, MOD)) % MOD
			if coeff_S != 0 {
				u_g[r] = coeff_S
			}
		}
		const_right := (1 + const_u + q_delta*current_const%MOD) % MOD
		coeff_e := (ce_u + q_delta*current_ce%MOD) % MOD
		coeff_self := int64(0)
		coeff_g := make(map[int64]int64)
		for s, cof := range u_g {
			coeff_g[s] = (coeff_g[s] + cof) % MOD
		}
		for s, cof := range current_g {
			coeff_self = (coeff_self + q_delta*cof%MOD) % MOD
			coeff_g[s] = (coeff_g[s] + q_delta*cof%s * s % MOD) % MOD
		}
		den := (d - coeff_self + MOD) % MOD
		inv_den := modInv(den, MOD)
		current_const = const_right * inv_den % MOD
		current_ce = coeff_e * inv_den % MOD
		current_g = make(map[int64]int64)
		for s, cof := range coeff_g {
			if cof != 0 {
				current_g[s] = cof * inv_den % MOD
			}
		}
	}
	fmt.Println(current_const)
}
```