#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define double long double
#define print(a) for(auto x : a) cout << x << " "; cout << endl
const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;
inline int power(int a, int b, int mod) {
int x = 1;
a %= mod;
while (b) {
if (b & 1) x = (x * a) % mod;
a = (a * a) % mod;
b >>= 1;
}
return x;
}
vector<int> fact(N);
vector<int> ifact(N);
void computeFactorial(int mod){
fact[0] = ifact[0] = 1;
for(int i=1; i<N; i++){
fact[i] = (fact[i-1] * i)% mod;
}
ifact[N-1] = power(fact[N-1], mod-2, mod);
for(int i = N-2; i>=1; i--){
ifact[i] = (ifact[i+1] * (i+1))%mod;
}
}
int nCr(int n, int r, int mod){
if(r>n || r<0) return 0;
return ( ( fact[n] * ifact[r] )%mod * ifact[n-r] ) % mod;
}
//_ ***************************** START Below *******************************
int MOD = 998244353;
vector<int> a;
int consistency(int n){
computeFactorial(MOD);
int ways = 1;
for(int i=0; i<=n-3; i+=3){
vector<int> triad = {a[i], a[i+1], a[i+2]};
sort(begin(triad), end(triad), greater<int>());
if(triad[0] == triad[2]){
ways = (ways*3)%MOD;
}
else if(triad[0] != triad[1] && triad[1] == triad[2] ){
ways = (ways*2)%MOD;
}
else ways *= 1;
}
int t = n/3; // total triads t
int totalWays = (nCr(t, t/2, MOD) * ways)%MOD;
return totalWays;
}
int practice(int n){
return 0;
}
void solve() {
int n;
cin>> n;
a.resize(n);
for(int i=0; i<n; i++) cin >> a[i];
cout << consistency(n) << endl;
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50ICAgICAgICAgICAgICBsb25nIGxvbmcgaW50CiNkZWZpbmUgZG91YmxlICAgICAgICAgICBsb25nIGRvdWJsZQojZGVmaW5lIHByaW50KGEpICAgICAgICAgZm9yKGF1dG8geCA6IGEpIGNvdXQgPDwgeCA8PCAiICI7IGNvdXQgPDwgZW5kbAoKCmNvbnN0IGludCBNID0gMTAwMDAwMDAwNzsKY29uc3QgaW50IE4gPSAzZTUrOTsKY29uc3QgaW50IElORiA9IDJlOSsxOwpjb25zdCBpbnQgTElORiA9IDIwMDAwMDAwMDAwMDAwMDAwMDE7CgoKCmlubGluZSBpbnQgcG93ZXIoaW50IGEsIGludCBiLCBpbnQgbW9kKSB7CiAgICBpbnQgeCA9IDE7CiAgICBhICU9IG1vZDsKICAgIHdoaWxlIChiKSB7CiAgICAgICAgaWYgKGIgJiAxKSB4ID0gKHggKiBhKSAlIG1vZDsgCiAgICAgICAgYSA9IChhICogYSkgJSBtb2Q7CiAgICAgICAgYiA+Pj0gMTsKICAgIH0KICAgIHJldHVybiB4Owp9CgoKCnZlY3RvcjxpbnQ+IGZhY3QoTik7CnZlY3RvcjxpbnQ+IGlmYWN0KE4pOwoKCnZvaWQgY29tcHV0ZUZhY3RvcmlhbChpbnQgbW9kKXsKCWZhY3RbMF0gPSBpZmFjdFswXSA9IDE7Cglmb3IoaW50IGk9MTsgaTxOOyBpKyspewoJCWZhY3RbaV0gPSAoZmFjdFtpLTFdICogaSklIG1vZDsKCX0KCgoJaWZhY3RbTi0xXSA9IHBvd2VyKGZhY3RbTi0xXSwgbW9kLTIsIG1vZCk7Cglmb3IoaW50IGkgPSBOLTI7IGk+PTE7IGktLSl7CgkJaWZhY3RbaV0gPSAoaWZhY3RbaSsxXSAqIChpKzEpKSVtb2Q7Cgl9Cn0KCmludCBuQ3IoaW50IG4sIGludCByLCBpbnQgbW9kKXsKCWlmKHI+biB8fCByPDApIHJldHVybiAwOwoJcmV0dXJuICggKCBmYWN0W25dICogaWZhY3Rbcl0gKSVtb2QgKiBpZmFjdFtuLXJdICkgJSBtb2Q7Cn0KCgoKLy9fICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFNUQVJUIEJlbG93ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCgppbnQgTU9EID0gOTk4MjQ0MzUzOwoKCnZlY3RvcjxpbnQ+IGE7CgppbnQgY29uc2lzdGVuY3koaW50IG4pewoKICAgIGNvbXB1dGVGYWN0b3JpYWwoTU9EKTsKCiAgICBpbnQgd2F5cyA9IDE7CiAgICBmb3IoaW50IGk9MDsgaTw9bi0zOyBpKz0zKXsKICAgICAgICB2ZWN0b3I8aW50PiB0cmlhZCA9IHthW2ldLCBhW2krMV0sIGFbaSsyXX07CiAgICAgICAgc29ydChiZWdpbih0cmlhZCksIGVuZCh0cmlhZCksIGdyZWF0ZXI8aW50PigpKTsKICAgICAgICAKICAgICAgICBpZih0cmlhZFswXSA9PSB0cmlhZFsyXSl7CiAgICAgICAgICAgIHdheXMgPSAod2F5cyozKSVNT0Q7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYodHJpYWRbMF0gIT0gdHJpYWRbMV0gJiYgdHJpYWRbMV0gPT0gdHJpYWRbMl0gKXsKICAgICAgICAgICAgd2F5cyA9ICh3YXlzKjIpJU1PRDsKICAgICAgICB9CiAgICAgICAgZWxzZSB3YXlzICo9IDE7CiAgICB9CgogICAgaW50IHQgPSBuLzM7IC8vIHRvdGFsIHRyaWFkcyB0CiAgICBpbnQgdG90YWxXYXlzID0gKG5Dcih0LCB0LzIsIE1PRCkgKiB3YXlzKSVNT0Q7CgoKICAgIHJldHVybiB0b3RhbFdheXM7Cn0KCgoKCgoKCgoKCgoKCgoKaW50IHByYWN0aWNlKGludCBuKXsKCgogICAgcmV0dXJuIDA7Cn0KCgoKCgp2b2lkIHNvbHZlKCkgewogICAgCiAgICBpbnQgbjsKICAgIGNpbj4+IG47CiAgICAKICAgIGEucmVzaXplKG4pOwogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKSBjaW4gPj4gYVtpXTsKICAgIAogICAgY291dCA8PCBjb25zaXN0ZW5jeShuKSA8PCBlbmRsOwoKCn0KCgoKCgppbnQzMl90IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBpbnQgdCA9IDE7CiAgICAvLyBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQoKICAgIHJldHVybiAwOwp9