#include using namespace std; constexpr int Inf = 2000000000; constexpr long long INF= 2000000000000000000; template inline bool chmax(T &a, T b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(T &a, T b) { if (a > b) { a = b; return true; } return false; } template T modpow(T N, U P, T M = -1) { if(P < 0) return 0; T ret = 1; if(M != -1) ret %= M; while(P) { if(P & 1) { if(M == -1) ret *= N; else ret = ret * N % M; } P /= 2; if(M == -1) N *= N; else N = N * N % M; } return ret; } template struct FixPoint : F { template FixPoint(G&& g) : F{std::forward(g)} {} template decltype(auto) operator()(Args&&... args) const { return F::operator()(*this, std::forward(args)...); } }; #if defined(__cpp_deduction_guides) template FixPoint(F&&) -> FixPoint>; #endif // defined(__cpp_deduction_guides) template inline FixPoint> fix(F&& f) { return std::forward>(f); } constexpr long long MOD = 998244353; int main() { int n; cin >> n; vector vec(n); for(auto& x: vec) cin >> x; map> ma; for(int i = 0;i < n;i++) { if(ma.count(vec[i] - 1)) { ma[vec[i]] = {(ma[vec[i]].first + ma[vec[i] - 1].first + ma[vec[i] - 1].second) % MOD,ma[vec[i]].second + 1}; } else { ma[vec[i]] = {ma[vec[i]].first,ma[vec[i]].second + 1}; } } long long ret = 0; for(auto& [key,value]: ma) { ret += value.first; ret %= MOD; } cout << ret << endl; }