만드는 중입니다

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

짧은 함수

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

요약
길이 N인 배열 A와 정수 K가 주어질 때, i번째 라운드마다 B[j]를 A[j]와 A[(j+2i) mod N]의 곱으로 바꾸는 과정을 K번 반복한 뒤 B의 각 원소를 998244353으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

유형
수학, 정수론, 분할 정복, 조합론
정답자
아직 제출이 없습니다

문제

지난주 알고리즘 수업의 강사가 주어진 의사코드 함수의 출력을 구하는 과제를 냈다. 과제는 문제 하나뿐이지만 강사는 얕보지 말라고 경고했다.

길이가 NN인 양의 정수 배열 A[]A[](인덱스는 00부터 N−1N-1까지)와 정수 KK가 주어진다. 다음 함수의 출력을 구하시오.

SomeFunction(A[0..N-1], N, K):
    B[0..N-1] = A[0..N-1]
    for i = 0 to K-1:
        A[0..N-1] = B[0..N-1]
        for j = 0 to N-1:
            B[j] = A[j] × A[(j + 2i) mod N]
    return B[0..N-1]

함수가 반환하는 B[0..N−1]B[0..N-1]의 값을 구하시오. 입력 A[]A[], NN, KK는 조교에게 문의하여 받으시오. 직접 구현하면 몇 시간이 걸릴 수 있으므로 더 빠른 방법이 필요하다.

B[0..N−1]B[0..N-1]의 값은 매우 클 수 있다. 각 원소를 998 244 353998\,244\,353으로 나눈 나머지를 출력하라.

입력

첫 줄에 두 정수 NN과 KK가 주어진다 (1≤N≤100 0001 \le N \le 100\,000; 1≤K≤1091 \le K \le 10^9). 다음 줄에는 배열 AA의 원소인 NN개의 정수 AiA_i가 주어진다 (1≤Ai<998 244 3531 \le A_i < 998\,244\,353).

출력

NN개의 정수를 한 줄에 공백으로 구분하여 출력하라. 배열 B[]B[]의 각 원소를 998 244 353998\,244\,353으로 나눈 나머지이다.

예제4

  1. 예제 1

    입력
    5 2
    1 2 3 4 5
    
    예상 출력
    24 120 60 40 30
    
  2. 예제 2

    입력
    8 3
    12 5 16 14 10 6 9 2
    
    예상 출력
    14515200 14515200 14515200 14515200 14515200 14515200 14515200 14515200
    
  3. 예제 3

    입력
    6 10
    3 7 8 2 9 5
    
    예상 출력
    56347321 169041963 833775940 811788154 844769833 639990479
    
  4. 예제 4

    입력
    2 100
    1 2
    
    예상 출력
    917380677 917380677