func_code_string: #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);   }   