#include #include #include #include using namespace std; using mint=atcoder::modint998244353; struct dat{ int pos; mint val[17]; }; mint comb[17][17],pM[3<<17]; mint ratio[17][17]; int N,M,C[3<<17]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin>>N>>M; pM[0]=1; for(int i=0;i>C[i]; if(C[i]==0)left++; } for(int i=0;i<=M;i++) { comb[i][0]=comb[i][i]=1; for(int j=1;jdlm; { dat tmp; tmp.pos=N; for(int i=0;i<=M;i++)tmp.val[i]=0; dlm.push_back(tmp); } mint ans=0; for(int l=N-1;l>=0;l--) { for(int k=0;k<=M;k++)dlm[0].val[k]+=comb[M][k]*pM[right]; dlm[0].pos=l; if(C[l]==0) { for(int i=0;il&&C[dlm[i].pos]==C[l]) { for(int k=0;k<=M;k++)dlm[i-1].val[k]+=dlm[i].val[k]; dlm.erase(dlm.begin()+i); break; } assert(r>0); for(int k=0;k<=r;k++)dlm[i].val[k]*=ratio[r][k]; r--; } } mint cur=0; for(int i=0;i