炮哥的数数题
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

定义

max(l,r) 表示数组在区间 [l,r] 上的最大值。

min(l,r) 表示数组在区间 [l,r] 上的最小值。

sum(l,r) 表示数组在区间 [l,r] 上的和。

给定一个长度为 n 的数组 a 。

请你输出 \sum_{i=1}^{n} \sum_{j=i}^{n} (max(i,j)-min(i,j)) \times sum(i,j)

输入描述:

第一行输入一个整数 n(1 \leq n \leq 2 \times 10^6)

接下来一行输入 n 个整数 a_1,a_2,a_3...a_n(1 \leq a_i \leq 10^9)

输出描述:

根据题意输出一个整数,由于答案可能过大,请将答案对 998244353 取模。
示例1

输入

复制
8
3 1 5 9 6 2 7 4

输出

复制
3753