| 10 | ll ans, dp[maxN+1][maxM+1]; |
| 11 | |
| 12 | int main(){ |
| 13 | scanf("%d %d", &N, &M); |
| 14 | for(int i = 1; i <= N; i++) |
| 15 | scanf("%d", &x[i]); |
| 16 | |
| 17 | if(x[1]) |
| 18 | dp[1][x[1]] = 1; |
| 19 | else |
| 20 | for(int i = 1; i <= M; i++) |
| 21 | dp[1][i] = 1; |
| 22 | |
| 23 | for(int i = 2; i <= N; i++){ |
| 24 | for(int j = 1; j <= M; j++){ |
| 25 | dp[i][j] = dp[i-1][j]; |
| 26 | if(j != 1) dp[i][j] += dp[i-1][j-1]; |
| 27 | if(j != M) dp[i][j] += dp[i-1][j+1]; |
| 28 | dp[i][j] %= MOD; |
| 29 | } |
| 30 | |
| 31 | if(x[i]) |
| 32 | for(int j = 0; j <= M; j++) |
| 33 | if(j != x[i]) |
| 34 | dp[i][j] = 0; |
| 35 | } |
| 36 | |
| 37 | for(int i= 1; i <= M; i++) |
| 38 | ans = (ans + dp[N][i]) % MOD; |
| 39 | printf("%lld\n", ans); |
| 40 | } |
nothing calls this directly
no outgoing calls
no test coverage detected