#include <bits/stdc++.h>
#define MOD 998244353
using namespace std;
inline int add(int a,int b)
{a+=b;return a>=MOD?a-MOD:a;}
inline int sub(int a,int b)
{a-=b;return a<0?a+MOD:a;}
inline int mul(int a,int b)
{return 1LL*a*b%MOD;}
inline void Add(int &a,int b)
{a+=b;a>=MOD?a-=MOD:1;}
const int Q=404;
int C[Q][Q],f[Q][Q][Q][2],h[Q],bok[Q][Q];
int iid[Q][Q],maxn=0,owo[Q][2],p2[Q];
void G(int l,int r,int lim)
{
    int id=iid[l][r];
    if(!id)id=iid[l][r]=++maxn;
    if(bok[id][lim])return;
    bok[id][lim]=1;
    for(int ii=l;ii<=r;ii++)
        if(h[ii]<lim){
            vector<pair<int,int>> rem;
            int now=r-l+1;
            for(int jj=l,k;jj<=r;jj=k)
                if(h[jj]>=lim){
                    for(k=jj+1;k<=r&&h[k]>=lim;k++);
                    G(jj,k-1,lim),rem.push_back(make_pair(jj,k-1));
                    now-=k-jj;
                }
                else k=jj+1;
            f[id][lim][now][0]=f[id][lim][0][1]=1;
            for(pair<int,int> o:rem){
                int nw=iid[o.first][o.second],len=o.second-o.first+1;
                for(int i=0;i<=now;i++)
                    for(int j=0;j<2;j++)
                        owo[i][j]=f[id][lim][i][j],f[id][lim][i][j]=0;
                for(int i=0;i<=now;i++)
                    for(int j=0;j<=len;j++)
                        for(int k=0;k<2;k++)
                            Add(f[id][lim][i+j][k],mul(owo[i][k],f[nw][lim][j][k]));
                now+=len;
            }
            return;
        }
    G(l,r,lim+1);
    int len=r-l+1;
    for(int i=0;i<=len;i++)
        for(int j=i;j<=len;j++) 
            Add(f[id][lim][j][0],mul(mul(p2[i]-(i==j),C[len-i][len-j]),f[id][lim+1][i][0])),
            Add(f[id][lim][j][1],mul(mul(p2[i]-(i==j),C[len-i][len-j]),f[id][lim+1][i][1]));
    for(int i=0;i<=len;i++)
        Add(f[id][lim][i][0],f[id][lim+1][i][1]),Add(f[id][lim][i][1],f[id][lim+1][i][1]);
}
int main()
{
    for(int i=0;i<Q;i++){
        C[i][0]=1;
        for(int j=1;j<=i;j++)
            C[i][j]=add(C[i-1][j-1],C[i-1][j]);
    }
    p2[0]=1;
    for(int i=1;i<Q;i++)
        p2[i]=add(p2[i-1],p2[i-1]);
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&h[i]);
    G(1,n,1);
    printf("%d\n",f[iid[1][n]][1][n][0]);
    return 0;
}