#include using namespace std; #include using namespace atcoder; #define ll long long #define rep(i, n) for (int i = 0; i < (n); i++) #define P pair #define LP pair #define fi first #define se second #define pb push_back #define eb emplace_back #define all(s) s.begin(), s.end() #define rall(s) s.rbegin(), s.rend() template void chmax(T& a, T b) { a = max(a, b); }; template void chmin(T& a, T b) { a = min(a, b); }; using mint = modint998244353; int main() { int n; cin >> n; const int INF = 1001001001; vector pos(n), l(n, INF), r(n, -1); rep(i,n) { int p; cin >> p; pos[p] = i; } rep(i,n) { chmin(l[i], pos[i]); chmax(r[i], pos[i]); if (i > 0) { chmin(l[i], l[i-1]); chmax(r[i], r[i-1]); } } mint ans = 1; for (int i = 1; i < n; i++) { if (l[i-1] == l[i] && r[i-1] == r[i]) { ans *= r[i]-l[i]+1-i; } } cout << ans.val() << endl; return 0; }