import sys input = lambda: sys.stdin.readline().rstrip() ii = lambda: int(input()) mi = lambda: map(int, input().split()) li = lambda: list(mi()) INF = 2**63-1 mod = 998244353 class fenwick_tree(): n=1 data=[0 for i in range(n)] def __init__(self,N): self.n=N self.data=[0 for i in range(N)] def add(self,p,x): assert 0<=p0): s+=self.data[r-1] r-=r&-r return s def __getitem__(self, p): if isinstance(p, int): return self.sum(p, p + 1) else: return self.sum(p.start, p.stop) def __setitem__(self, p, x): return self.add(p, x - self[p]) n = ii() p = li() #転倒数の期待値を求めればよい.確率1/2で各間に仕切りが入れられるとして, #P_i > P_j なる転倒が残る条件はP_iとP_jの間に仕切りがあること. #よって,これの寄与は 1 - 1/2^(j - i) = 1 - 1/2^j * 2^i となる. #bitを持ってえいえいやればよい pow2 = [1] * (n + 1) for i in range(1, n + 1): pow2[i] = (pow2[i - 1] * 2) % mod inv2 = [1] * (n + 1) i2 = pow(2, mod - 2, mod) for i in range(1, n + 1): inv2[i] = (inv2[i - 1] * i2) % mod BIT1 = fenwick_tree(n + 1) BIT2 = fenwick_tree(n + 1) ans = 0 for i in range(n): ans += BIT1[p[i]+1:n+1] - inv2[i] * BIT2[p[i]+1:n+1] ans %= mod BIT1[p[i]] += 1 BIT2[p[i]] += pow2[i] print(ans * pow2[n - 1] % mod)