//https://c...content-available-to-author-only...s.fi/problemset/task/1746
/*
dp[i][j] là số lượng mảng thỏa mãn với số cuối là j
*/
#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 1e5+5,MaxM=105,MOD=1e9+7;
long long n,m,a[MaxN],dp[MaxN][MaxM];
void add(long long &a,long long b)
{
a+=b;
if(a>=MOD) a-=MOD;
}
void input()
{
cin >> n >> m;
for(long long i=1;i<=n;i++)
cin >> a[i];
}
void solve()
{
for(long long i=1;i<=n;i++)
{
for(long long j=1;j<=m;j++)
dp[i][j]=0;
}
if(a[1]==0)
{
for(long long j=1;j<=m;j++)
dp[1][j]=1;
}
else
{
dp[1][a[1]]=1;
}
for(long long i=2;i<=n;i++)
{
if(a[i]==0)
{
for(long long j=1;j<=m;j++)
{
add(dp[i][j],dp[i-1][j]);
if(j>1)
add(dp[i][j],dp[i-1][j-1]);
if(j<m)
add(dp[i][j],dp[i-1][j+1]);
}
}
else
{
long long j=a[i];
add(dp[i][j],dp[i-1][j]);
if(j>1)
add(dp[i][j],dp[i-1][j-1]);
if(j<m)
add(dp[i][j],dp[i-1][j+1]);
}
}
long long res=0;
if(a[n]==0)
{
for(long long j=1;j<=m;j++)
add(res,dp[n][j]);
}
else
{
res=dp[n][a[n]];
}
cout << res;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
input();
solve();
}
Ly9odHRwczovL2MuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnMuZmkvcHJvYmxlbXNldC90YXNrLzE3NDYKLyoKZHBbaV1bal0gbMOgIHPhu5EgbMaw4bujbmcgbeG6o25nIHRo4buPYSBtw6NuIHbhu5tpIHPhu5EgY3Xhu5FpIGzDoCBqCiovCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGxvbmcgbG9uZyBNYXhOID0gMWU1KzUsTWF4TT0xMDUsTU9EPTFlOSs3Owpsb25nIGxvbmcgbixtLGFbTWF4Tl0sZHBbTWF4Tl1bTWF4TV07Cgp2b2lkIGFkZChsb25nIGxvbmcgJmEsbG9uZyBsb25nIGIpCnsKICAgIGErPWI7CiAgICBpZihhPj1NT0QpIGEtPU1PRDsKfQoKdm9pZCBpbnB1dCgpCnsKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IobG9uZyBsb25nIGk9MTtpPD1uO2krKykKICAgICAgICBjaW4gPj4gYVtpXTsKfQoKdm9pZCBzb2x2ZSgpCnsKICAgIGZvcihsb25nIGxvbmcgaT0xO2k8PW47aSsrKQogICAgewogICAgICAgIGZvcihsb25nIGxvbmcgaj0xO2o8PW07aisrKQogICAgICAgICAgICBkcFtpXVtqXT0wOwogICAgfQoKICAgIGlmKGFbMV09PTApCiAgICB7CiAgICAgICAgZm9yKGxvbmcgbG9uZyBqPTE7ajw9bTtqKyspCiAgICAgICAgICAgIGRwWzFdW2pdPTE7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgZHBbMV1bYVsxXV09MTsKICAgIH0KCiAgICBmb3IobG9uZyBsb25nIGk9MjtpPD1uO2krKykKICAgIHsKICAgICAgICBpZihhW2ldPT0wKQogICAgICAgIHsKICAgICAgICAgICAgZm9yKGxvbmcgbG9uZyBqPTE7ajw9bTtqKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFkZChkcFtpXVtqXSxkcFtpLTFdW2pdKTsKCiAgICAgICAgICAgICAgICBpZihqPjEpCiAgICAgICAgICAgICAgICAgICAgYWRkKGRwW2ldW2pdLGRwW2ktMV1bai0xXSk7CgogICAgICAgICAgICAgICAgaWYoajxtKQogICAgICAgICAgICAgICAgICAgIGFkZChkcFtpXVtqXSxkcFtpLTFdW2orMV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGxvbmcgbG9uZyBqPWFbaV07CgogICAgICAgICAgICBhZGQoZHBbaV1bal0sZHBbaS0xXVtqXSk7CgogICAgICAgICAgICBpZihqPjEpCiAgICAgICAgICAgICAgICBhZGQoZHBbaV1bal0sZHBbaS0xXVtqLTFdKTsKCiAgICAgICAgICAgIGlmKGo8bSkKICAgICAgICAgICAgICAgIGFkZChkcFtpXVtqXSxkcFtpLTFdW2orMV0pOwogICAgICAgIH0KICAgIH0KCiAgICBsb25nIGxvbmcgcmVzPTA7CgogICAgaWYoYVtuXT09MCkKICAgIHsKICAgICAgICBmb3IobG9uZyBsb25nIGo9MTtqPD1tO2orKykKICAgICAgICAgICAgYWRkKHJlcyxkcFtuXVtqXSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgcmVzPWRwW25dW2Fbbl1dOwogICAgfQoKICAgIGNvdXQgPDwgcmVzOwp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwoKICAgIGlucHV0KCk7CiAgICBzb2x2ZSgpOwp9Cg==