[F] Functional Sequence

시간 제한1초메모리 제한1024 MB

요약
B = f^K(A)이고 f가 대각 차분 D_i = A_i - A_{i-1}을 읽을 때, 가능한 A를 1e9+7로 나눈 나머지로 복원한다.
난이도

어려움10점 중 8점

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

문제

하바는 최근 학교에서 수열과 함수에 대해 배웠다. 배운 것을 바로 적용하는 성격의 하바는 아래와 같이 길이 NN의 수열 AA를 받아서 길이 NN의 수열 DD를 반환하는 함수 d(A)d(A)를 만들었다.

  • D_0=A_0D\_0=A\_0이다.
  • 0\<i\<N0\<i\<N인 ii에 대해 D_i=A_i−A_i−1D\_i=A\_{i}-A\_{i-1}이다.

하지만 이 함수를 가지고 놀던 하바는 함수를 여러 번 적용할 수 있다는 것을 깨닫고, 아래와 같이 길이 NN의 수열 AA를 받아서 길이 NN의 수열 BB를 반환하는 함수 f(A)f(A)를 만들었다.

  • 0≤i\<N0\le i\<N인 ii에 대해 B_i=(di(A))_iB\_{i}=(d^{i}(A))\_i이다.

did^i가 무엇을 의미하는지 모른다면 하단의 노트를 참고하자.

이제 조금 더 재밌는 함수를 가진 하바는 가지고 있던 수열 AA에 함수 ff를 KK번 적용하여 B=fK(A)B=f^{K}(A)를 만들었다.

수열 BB와 함수를 적용한 횟수 KK가 주어질 때 하바가 가지고 있던 수열 AA를 추정해 보자.

입력

첫째 줄에는 하바가 만든 수열 BB의 길이 NN과 하바가 함수를 적용한 횟수 KK가 공백으로 구분되어 주어진다. (1≤N≤5,000;(1 \le N \le 5\\,000; 0≤K≤109)0 \le K \le 10^9)

둘째 줄에는 수열 BB의 원소 B_0B\_0, B_1B\_1, …\ldots, B_N−1B\_{N-1}이 공백으로 구분되어 주어진다. (0≤B_i≤109)(0 \le B\_{i} \le 10^9)

출력

만약 조건을 만족하는 수열 AA가 존재하지 않는다면 첫째 줄에 -1을 출력한다.

만약 조건을 만족하는 수열 AA가 존재한다면 첫째 줄에 수열 AA의 각 원소 A_0A\_0, A_1A\_1, …\ldots, A_N−1A\_{N-1}을 109+710^9 + 7로 나눈 나머지를 공백으로 구분하여 출력한다.

만약 가능한 수열이 여러 가지라면 그중 아무거나 하나를 출력한다.

힌트

어떠한 함수 ff에 대해 fnf^{n}은 다음과 같이 정의한다.

  • f0(X)=Xf^{0}(X) =X다.
  • fn(X)=f(fn−1(X))f^{n}(X) =f(f^{n-1}(X))다.

예제2

  1. 예제 1

    입력
    5 2
    1 2 15 134 1613
    
    예상 출력
    1 4 27 256 3125
    
  2. 예제 2

    입력
    4 0
    1 2 1 7
    
    예상 출력
    1 2 1 7