Ivan unexpectedly saw a present from one of his previous birthdays. It is array of n numbers from 1 to 200. Array is old and some numbers are hard to read. Ivan remembers that for all elements at least one of its neighbours ls not less than it, more formally:

a_{1} ≤ a_{2},

a_{n} ≤ a_{n-1} and

a_{i} ≤ max(a_{i-1},    a_{i+1}) for all i from 2 to n-1.

Ivan does not remember the array and asks to find the number of ways to restore it. Restored elements also should be integers from 1 to 200. Since the number of ways can be big, print it modulo 998244353.

Input

First line of input contains one integer n (2 ≤ n ≤ 10^{5}) — size of the array.

Second line of input contains n integers a_{i} — elements of array. Either a_{i} = -1 or 1 ≤ a_{i} ≤ 200. a_{i} = -1 means that i-th element can't be read.

Output

Print number of ways to restore the array modulo 998244353.

Examples

Input

3
1 -1 2


Output

1


Input

2
-1 -1


Output

200

Note

In the first example, only possible value of a_{2} is 2.

In the second example, a_{1} = a_{2} so there are 200 different values because all restored elements should be integers between 1 and 200. 
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

#define ll long long
#define ul unsigned long
#define ld long double
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")

using namespace std;
using namespace __gnu_pbds;

typedef tree
<
ll,
null_type,
less<ll>,
rb_tree_tag,
tree_order_statistics_node_update
> or_st;


ll N=998244353  ,M=2e5;
ll i,j;
ll x,y,z,n,m,k,l,r,t,ma=0,x2,y2,z2,x3,y3,x4,y4,f,d[500100],pr[510000],a[510000],b[510000];
int dp[100100][210][2];
ll ans,ans2;
string s,s2,s3;
char c[510000];
vector<ll>v,v2,v3;

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cin>>a[i];
        if(a[i]==-1)a[i]=0;
    }
    dp[0][0][1]=1;
    for(i=1;i<=n;i++)
    {
        for(j=200;j>=0;j--)
        {
            dp[i-1][j][1]+=dp[i-1][j+1][1];
            if(dp[i-1][j][1]>=N)dp[i-1][j][1]-=N;
        }
        ll k=0,k2=0;
        for(j=1;j<=200;j++)
        {
            k+=dp[i-1][j-1][0];
            if(k>=N)k-=N;
            k2+=dp[i-1][j-1][1];
            if(k2>=N)k2-=N;
            if(a[i]==j||!a[i])
            {
                dp[i][j][1]=(dp[i-1][j][1]+dp[i-1][j][0])%N;
                dp[i][j][0]=(k+k2)%N;
            }
        }
    }

    ll ans=0;
    for(j=1;j<=200;j++)ans+=dp[n][j][1];
    cout<<ans%N;

}








