← Home
```go
package main

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

func power(base, exp int64) int64 {
	res := int64(1)
	base %= 998244353
	for exp > 0 {
		if exp%2 == 1 {
			res = (res * base) % 998244353
		}
		base = (base * base) % 998244353
		exp /= 2
	}
	return res
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	if !scanner.Scan() {
		return
	}
	n, _ := strconv.Atoi(scanner.Text())

	A := make([]int, n)
	S := 0
	for i := 0; i < n; i++ {
		scanner.Scan()
		A[i], _ = strconv.Atoi(scanner.Text())
		S += A[i]
	}

	M := int64(998244353)

	inv := make([]int64, S+1)
	if S >= 1 {
		inv[1] = 1
		for i := 2; i <= S; i++ {
			inv[i] = (M - M/int64(i)) * inv[M%int64(i)] % M
		}
	}

	D := make([]int64, S)
	invN := power(int64(n), M-2)
	nMinus1 := int64(n - 1)

	C2 := (int64(S) * nMinus1) % M
	C2 = (C2 * invN) % M

	if S > 0 {
		D[0] = (M - nMinus1*invN%M) % M

		for x := int64(1); x < int64(S); x++ {
			term1 := (x * nMinus1) % M
			term1 = (term1 * D[x-1]) % M

			num := (term1 - C2 + M) % M

			D[x] = (num * inv[int64(S)-x]) % M
		}
	}

	f := make([]int64, S+1)
	f[0] = 0
	for i := 1; i <= S; i++ {
		f[i] = (f[i-1] + D[i-1]) % M
	}

	ans := int64(0)
	for _, a := range A {
		ans = (ans + f[a]) % M
	}
	ans = (ans - f[S] + M) % M

	fmt.Println(ans)
}
```