#include #include using namespace std; using namespace atcoder; #define ll long long using mint = modint998244353; ll op(ll a, ll b) { return a + b; } ll e() { return 0; } void solve() { int n; cin >> n; vector a(n); for(int i=0; i> a[i]; segtree rsum(n), rcnt(n), lsum(n), lcnt(n); vector m_sum(n, 0), m_cnt(n, 0); vector id(n); iota(id.begin(), id.end(), 0); sort(id.begin(), id.end(), [&](int i, int j) { return a[i] < a[j]; }); for (auto &i: id) { m_sum[i] = rsum.prod(i, n); m_cnt[i] = rcnt.prod(i, n); rsum.set(i, a[i]); rcnt.set(i, 1); } mint answer = 0; reverse(id.begin(), id.end()); for (auto &i: id) { mint s = lsum.prod(0, i); mint c = lcnt.prod(0, i); answer += s * m_cnt[i]; answer += c * m_sum[i]; answer += (c * m_cnt[i]) * a[i]; lsum.set(i, a[i]); lcnt.set(i, 1); } cout << answer.val() << "\n"; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int t = 1; // std::cin >> t; while (t--) solve(); return 0; }