#include <bits/stdc++.h>
using namespace std;
long long N, A[606060];
long long lp[303030];
long long ct[303030];
long long ctrl;
long long ans;
long long i, j;
void zerort() {
  printf("0\n");
  exit(0);
}
int main() {
  scanf("%lld", &N);
  for (i = 0; i < N; i++) {
    scanf("%lld", &A[i]);
  }
  long long ast;
  long long Ac = A[0];
  for (ast = 0; ast < N && A[ast] == Ac; ast++) {
    A[N + ast] = A[ast];
  }
  Ac = A[N + ast] = A[ast];
  lp[Ac] = ast;
  for (i = ast; i < ast + N; i++) {
    if (A[i] == Ac) {
      ct[Ac]++;
      continue;
    }
    if (ct[A[i]] != 0) {
      zerort();
    }
    Ac = A[i];
    lp[Ac] = i;
    ct[Ac]++;
  }
  ctrl = ct[1] - 1;
  for (i = 1; i < N + 1; i++)
    if (ctrl < ct[i] - 1) zerort();
  long long space = 0;
  ans = 1;
  for (i = 1; i < N + 1; i++) {
    if (ct[i] == 0) {
      if (space == 0) zerort();
      ans = (ans * space) % 998244353l;
      space--;
    } else {
      long long il = A[lp[i] - 1];
      long long ir = A[lp[i] + ct[i]];
      if (il > i && i < ir && ct[i] - 1 < ctrl) zerort();
      if (il < i) {
        if (ir < i) {
          ans =
              (ans * (ctrl - ct[i] + 2 < ct[il] ? ctrl - ct[i] + 2 : ct[il])) %
              998244353l;
        }
        long long ctiil = ct[il] + ct[i];
        ct[il] = ctiil - ctrl - 1 > 1 ? ctiil - ctrl - 1 : 1;
        ct[i] = ctiil - ct[il];
        space += ct[il] - 1;
      }
      if (i > ir) {
        space += ct[i] - 1;
      }
    }
  }
  printf("%lld", ans);
  return 0;
}
