const int MAXN=5e5+5,Mod=998244353;
int a[MAXN],b[MAXN],lef[MAXN<<2],rig[MAXN<<2],s[MAXN<<2],addTag[MAXN<<2],signTag[MAXN<<2],setTag[MAXN<<2];
bool setFlag[MAXN<<2];
void build(int k,int L,int R){
lef[k]=L,rig[k]=R,signTag[k]=1;
if(L==R)
return;
int M=L+R>>1;
build(k<<1,L,M);
build(k<<1|1,M+1,R);
}
int getLen(int k){
return b[rig[k]]-b[lef[k]-1];
}
void toSet(int k,int v){
s[k]=1LL*getLen(k)*v%Mod;
addTag[k]=0;
signTag[k]=1;
setTag[k]=v;
setFlag[k]=true;
}
void toNeg(int k){
s[k]=(Mod-s[k]);
if(setFlag[k])
setTag[k]=(Mod-setTag[k])%Mod;
else{
signTag[k]*=-1;
addTag[k]=(Mod-addTag[k])%Mod;
}
}
void toAdd(int k,int v){
s[k]=(s[k]+1LL*getLen(k)*v)%Mod;
if(setFlag[k])
setTag[k]=(setTag[k]+v)%Mod;
else
addTag[k]=(addTag[k]+v)%Mod;
}
void push_down(int k){
if(setFlag[k]){
toSet(k<<1,setTag[k]);
toSet(k<<1|1,setTag[k]);
setFlag[k]=false;
}
else{
if(signTag[k]==-1){
toNeg(k<<1);
toNeg(k<<1|1);
signTag[k]=1;
}
if(addTag[k]){
toAdd(k<<1,addTag[k]);
toAdd(k<<1|1,addTag[k]);
addTag[k]=0;
}
}
}
void push_up(int k){
s[k]=(s[k<<1]+s[k<<1|1])%Mod;
}
void update1(int k,int L,int R,int v){
if(L<=lef[k]&&rig[k]<=R){
toSet(k,v);
return;
}
push_down(k);
int mid=lef[k]+rig[k]>>1;
if(mid>=L)
update1(k<<1,L,R,v);
if(mid<R)
update1(k<<1|1,L,R,v);
push_up(k);
}
void update2(int k,int L,int R,int v){
if(L<=lef[k]&&rig[k]<=R){
toNeg(k);
toAdd(k,v);
return;
}
push_down(k);
int mid=lef[k]+rig[k]>>1;
if(mid>=L)
update2(k<<1,L,R,v);
if(mid<R)
update2(k<<1|1,L,R,v);
push_up(k);
}
int query(int k,int L,int R){
if(L<=lef[k]&&rig[k]<=R)
return s[k];
push_down(k);
int mid=lef[k]+rig[k]>>1;
if(mid>=R)
return query(k<<1,L,R);
else if(mid<L)
return query(k<<1|1,L,R);
else
return (query(k<<1,L,R)+query(k<<1|1,L,R))%Mod;
}
int main()
{
int n=read_int();
_for(i,0,n)a[i]=b[i+1]=read_int();
sort(b,b+n+1);
int m=unique(b,b+n+1)-b;
_for(i,0,n)a[i]=lower_bound(b,b+m,a[i])-b;
build(1,1,m-1);
update1(1,1,a[0],1);
_for(i,1,n){
int v=query(1,1,a[i-1]);
if(a[i]<=a[i-1])
update2(1,1,a[i],v);
else{
update1(1,a[i-1]+1,a[i],v);
update2(1,1,a[i-1],v);
}
}
enter(query(1,1,a[n-1]));
return 0;
}