#include <bits/stdc++.h>   using namespace std;   template <class t>   t mag(t a) {     return a > 0 ? a : -a;   }   template <class T, class U>   T cdiv(T num, U den) {     return (num / den) + ((num % den) > 0);   }   std::ifstream term( /dev/tty );   std::string tempstring;   using ll = int_fast64_t;   using ii = pair<int, int>;   using vi = vector<int>;   using vl = vector<ll>;   using vii = vector<ii>;   const int &sij = 400010;   const ll &mod = 998244353ll;   int n;   ll add(ll a, ll b) { return (a + b) % mod; }   int esc(int tcase) {     cin >> n;     vi vec(n);     for (auto &e : vec) cin >> e;     vl dp0(201), sdp0(201), dp1(201), sdp1(201);     for (int i = 1; i <= 200; i++) {       if (vec.back() == -1 or i == vec.back()) dp0[i] = 1;     }     partial_sum(dp0.begin(), dp0.end(), sdp0.begin(), add);     partial_sum(dp1.begin(), dp1.end(), sdp1.begin(), add);     ;     auto get0 = [&](int l, int r) -> ll {       if (r < l) return 0;       return (sdp0[r] - sdp0[l - 1] + mod) % mod;     };     auto get1 = [&](int l, int r) -> ll {       if (r < l) return 0;       return (sdp1[r] - sdp1[l - 1] + mod) % mod;     };     for (auto i = n - 2; i >= 0; i--) {       vl ndp0(201), ndp1(201);       for (int x = 1; x <= 200; x++) {         if (vec[i] == -1 or x == vec[i]) {           ndp0[x] = (get0(1, x - 1) + get1(1, x - 1)) % mod;           ndp1[x] = (get1(x + 1, 200) + get1(x, x) + get0(x, x)) % mod;         }       }       partial_sum(ndp0.begin(), ndp0.end(), sdp0.begin(), add);       partial_sum(ndp1.begin(), ndp1.end(), sdp1.begin(), add);       ;       ;       ;     }     cout << get1(1, 200) <<   n ;     return 0;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     int tc = 1;     for (int i = 1; i <= tc; i++) esc(i);   }   