// #include <iostream>
// #include <string>
// #include <iomanip>
// #include <algorithm>
// #include <vector>
// #include <math.h>

// using namespace std;
// typedef long long ll;

// int main()
// {
//     ll n;
//     cin >> n;

//     ll d[n];

//     ll mod = 998244353LL;

//     for (int i = 0; i < n; i++)
//     {
//         cin >> d[i];
//     }

//     sort(d, d + n);

//     ll prev = 1LL;
//     ll now = 1LL;
//     ll answer = 1LL;

//     for (int i = 0; i < n; i++)
//     {
//         if (i > 0)
//         {
//             if (d[i] == 0)
//             {
//                 answer = 0;
//                 break;
//             }

//             if (d[i] - d[i - 1] > 1)
//             {
//                 answer = 0;
//                 break;
//             }

//             if (d[i] - d[i - 1] == 1)
//             {
//                 prev = now;
//                 now = 0;
//             }

//             answer = (prev * answer) % mod;
//             now += 1LL;
//         }
//         else
//         {
//             if (d[i] != 0)
//             {
//                 answer = 0;
//                 break;
//             }
//         }
//     }

//     cout << answer % (ll)mod << endl;

//     // cout << fixed;
//     // cout << setprecision(10);

//     // if (x >= a * a * b / 2)
//     // {

//     //     cout << atan(2 * (pow(a, 2) * b - x) / pow(a, 3) )* 180 / M_PI << endl;
//     // }
//     // else
//     // {
//     //     cout << atan(a * b * b / (2 * x)) * 180 / M_PI << endl;
//     // }

//     // ll answer = 1;

//     // ll last = n;

//     // for (ll i = 1; i < n; i++)
//     // {
//     //     if (i > last || i * i > n)
//     //     {
//     //         break;
//     //     }

//     //     if (n % i == 0)
//     //     {
//     //         if (i < n - i)
//     //         {
//     //             answer = (i - 1) + (n / i - 1);
//     //             last = n / i;
//     //         }
//     //         else
//     //         {
//     //             break;
//     //         }
//     //     }
//     // }

//     // cout << answer << endl;

//     // bool flg = false;

//     // for (int i = 1; i <= 9; i++)
//     // {
//     //     if (n % i == 0)
//     //     {
//     //         if ((n / i) >= 1 && (n / i) <= 9)
//     //         {
//     //             flg = true;
//     //             break;
//     //         }
//     //     }
//     // }

//     // if (!flg)
//     // {
//     //     cout << "No" << endl;
//     // }
//     // else
//     // {
//     //     cout << "Yes" << endl;
//     // }

//     // for (int i = 0; i < n; i++)
//     // {
//     //     cin >> a[i];
//     // }

//     // vector<ll> a;
//     // for (int i = 0; i < n; i++)
//     // {
//     //     int j;
//     //     cin >> j;
//     //     a.push_back(j);
//     // }

//     //sort(a,a+n); ソート
// }
#include <stdio.h>
#include <string>
#include <iostream>
#include <iomanip>
#include <map>
#include <algorithm>
#include <vector>
#include <math.h>
#define INF (long long)1000000007
#define MOD (long long)998244353
using namespace std;

int main(void){
    int n;
    cin >> n;
    vector<int> a(n);
    for(int i=0; i<n; i++)cin >> a[i];
    if(a[0]!=0){
        cout<<0<<endl;
        return 0;
    }
    int max_a=0;
    vector<int> count(n);
    for(int i=0; i<n; i++){
        count[a[i]]++;
        max_a=max(max_a,a[i]);
    }
    if(count[0]!=1){
        cout<<0<<endl;
        return 0;
    }
    long long result=1;
    for(int i=1; i<=max_a; i++){
        if(count[i]==0){
            cout<<0<<endl;
            return 0;
        }
        for(int j=0; j<count[i]; j++){
            result=(result*count[i-1])%MOD;
        }
    }
    cout << result << endl;
    return 0;
}


Measured memory_bytes: 1024