만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

우리 문제가 아니다

시간 제한2초메모리 제한512 MB

요약
-1로 표시된 빈칸을 채워 모든 인접한 두 수의 곱에 두 수 중 작은 값을 곱한 값이 C 이하가 되는 경우의 수를 구합니다. 경우의 수가 무한하면 -1을 출력합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 수학
정답자
아직 제출이 없습니다

문제

어떤 사람(내가 아님!)이 길이가 nn이고 음이 아닌 정수로 이루어진 배열을 좋은 배열이라고 부른다. 배열이 좋은 배열이 되려면 모든 1≤i<n1 \le i < n에 대해 aiai+1min⁡(ai,ai+1)≤Ca_i a_{i+1} \min(a_i, a_{i+1}) \le C가 성립해야 한다.

다른 사람(우리와는 상관없다!)이 길이가 nn이고 빈칸이 있는 배열을 준다. 빈칸을 채워서 배열이 좋은 배열이 되도록 하는 방법의 수를 구하라. 방법이 무한히 많으면 그 사실을 판단하라. 답이 유한하면 998244353998244353으로 나눈 나머지를 구하라.

입력

첫 줄에 두 정수 nn과 CC가 주어진다(1≤n≤1061 \le n \le 10^6, 0≤C≤10180 \le C \le 10^{18}). nn은 배열의 길이이고, CC는 곱에 대한 제약이다.

둘째 줄에는 배열 aa가 주어진다. 각 원소는 빈칸을 뜻하는 −1-1이거나, 00 이상 101810^{18} 이하의 정수이다.

출력

방법의 수가 무한하면 −1-1을 출력한다. 그렇지 않으면 방법의 수를 998244353998244353으로 나눈 나머지를 출력한다.

예제4

  1. 예제 1

    입력
    4 100
    -1 7 2 -1
    
    예상 출력
    104
    
  2. 예제 2

    입력
    4 100
    10 -1 -1 1
    
    예상 출력
    240
    
  3. 예제 3

    입력
    1 0
    -1
    
    예상 출력
    -1
    
  4. 예제 4

    입력
    2 10
    10 10
    
    예상 출력
    0