#include <bits/stdc++.h>
using namespace std;
long long N, A[606060];
long long ast;
long long lp[303030];
long long ct[303030];
long long ck[303030];
long long numr[303030];
long long numl[303030];
long long fact[303030];
long long i, j;
long long moddiv(long long a, long long b) {
  for (long long m = 998244353l - 2; m > 0; m /= 2) {
    if (m & 1) {
      a = a * b % 998244353l;
    }
    b = b * b % 998244353l;
  }
  return a;
}
void zerort() {
  printf("0\n");
  exit(0);
}
int main() {
  scanf("%lld", &N);
  for (i = 0; i < N; i++) {
    scanf("%lld", &A[i]);
    numr[i + 1] = -1;
    numl[i + 1] = -1;
  }
  long long ci = A[0];
  for (ast = 0; ast < N && A[ast] == ci; ast++) {
    A[N + ast] = A[ast];
  }
  A[N + ast] = A[ast];
  if (ast == N && A[0] != 1) zerort();
  ci = A[ast];
  lp[A[ast]] = ast;
  for (i = ast; i < ast + N; i++) {
    if (ci != A[i]) {
      ci = A[i];
      if (ct[ci] > 0) zerort();
      lp[ci] = i;
    }
    ct[ci]++;
  }
  long long ctrl = ct[1];
  for (i = 1; i < N + 1; i++) {
    if (ctrl < ct[i]) zerort();
  }
  long long ans = 1;
  long long space = 0;
  for (i = 1; i < N + 1; i++) {
    if (ct[i] == 0) {
      if (space == 0) zerort();
      ans = (ans * space) % 998244353l;
      space--;
    } else {
      long long Ai = A[lp[i]];
      long long Al = A[lp[i] - 1];
      long long Ar = A[lp[i] + ct[i]];
      if (Al > Ai && Ar > Ai && ctrl != ct[i]) zerort();
      if (Al < Ai && Ar < Ai) {
        ans =
            (ans * (ct[Al] < ctrl - ct[Ai] + 1 ? ct[Al] : ctrl - ct[Ai] + 1)) %
            998244353l;
        long long ctali = ct[Al] + ct[Ai];
        ct[Ai] = (ctali - ctrl >= 1 ? ctrl : ctali - 1);
        ct[Al] = ctali - ct[Ai];
      } else {
        if (Al < Ai && ct[Al] <= ctrl - ct[Ai]) {
          zerort();
        } else {
          long long ctali = ct[Al] + ct[Ai];
          ct[Ai] = (ctali - ctrl >= 1 ? ctrl : ctali - 1);
          ct[Al] = ctali - ct[Ai];
        }
      }
      if (ck[Ai] != 0) {
        space += ct[ck[Ai]] - 1;
      }
      if (Ar > Ai) {
        ck[Ar] = Ai;
      } else {
        space += ct[Ai] - 1;
      }
    }
  }
  printf("%lld\n", ans);
  return 0;
}
