#include <bits/stdc++.h>
using namespace std;
const long double PI = 3.141592653589793238462643383;
int vector_init(vector<vector<long long int> > &x, int r, int c) {
  x.resize(r);
  for (int i = 0; i < (r); ++i) x[i].resize(c);
}
int abso(int a) {
  if (a > 0) return a;
  return -a;
}
void print(vector<long long> &ans) {
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
  cout << "\n";
}
int equal(vector<int> &a, vector<int> &b) {
  for (int i = 0; i < a.size(); i++) {
    if (a[i] == b[i] && a[i] == 1) return 1;
  }
  return 0;
}
void print1(vector<vector<long long> > &edge) {
  for (int i = 0; i < edge.size(); i++) print(edge[i]);
}
long long maxx(long long a, long long b) {
  if (a > b) return a;
  return b;
}
long long minn(long long a, long long b) { return a + b - maxx(a, b); }
long long Ceil(long long a, long long b) {
  if (a % b == 0) return a / b;
  return a / b + 1;
}
long long find(vector<long long int> &a, vector<long long int> &c, long long t,
               long long cunt) {
  for (int i = 0; i < (a.size()); ++i) {
    if (a[i] == t) cunt--;
    if (cunt == 0) return c[i];
  }
}
long long power(long long k, long long m) {
  long long ans = 1;
  for (int i = 0; i < (k); ++i) {
    ans = (ans * 2) % m;
  }
  return ans;
}
int main() {
  cin.sync_with_stdio(0);
  cin.tie(0);
  cin.exceptions(cin.failbit);
  map<long long, long long> start;
  map<long long, long long> end;
  long long n;
  cin >> n;
  vector<long long int> a(n, 0);
  for (int i = 0; i < (n); ++i) {
    cin >> a[i];
    if (start[a[i]] == 0) start[a[i]] = i + 1;
    end[a[i]] = i + 1;
  }
  long long t = end[a[0]] - 1;
  long long k = 0;
  long long cunt = 0;
  while (k < n) {
    if (k == t + 1) {
      cunt++;
      t = end[a[k]] - 1;
    } else {
      t = maxx(t, end[a[k]] - 1);
    }
    k++;
  }
  cout << power(cunt, 998244353);
}
