만드는 중입니다

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

기숙사 비밀번호 구하기

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

요약
모든 인자가 서로 달라야 하는 조건에서 최대 N번의 질의로 998244353을 법으로 하는 숨겨진 계수 N개를 복원합니다.
난이도

보통10점 중 6점

유형
수학, 행렬
정답자
아직 제출이 없습니다

문제

이 문제는 인터랙티브 문제다.

한별이와 우빈이는 같은 기숙사 방을 배정받았다. 한별이와 같은 방을 쓰기 부끄러웠던 우빈이는 한별이가 들어오기 전에 문에 비밀번호 장치를 설치해 두었다. 장치를 풀려면 0≤xi<998 244 3530 \leq x_i < 998\,244\,353을 만족하는 NN개의 정수 x1,x2,⋯ ,xNx_1, x_2, \cdots, x_N을 알아내야 한다. 우빈이는 한별이의 프로그래밍 실력을 시험하려고 다음 함수를 제공했다. 한별이는 NN개의 정수 a1,a2,⋯ ,aNa_1, a_2, \cdots, a_N을 골라 함숫값 f(a1,a2,⋯ ,aN)f(a_1, a_2, \cdots, a_N)을 알아낼 수 있다.

0 이상 998244353 미만의 정수들의 집합을 M\mathbb{M}이라고 할 때, 함수 f:M×⋯×M→Mf: \mathbb{M} \times \cdots \times \mathbb{M} \rightarrow \mathbb{M}은 다음과 같이 정의된다.

f(a1,a2,⋯ ,aN)=(a1x1+a2x2+⋯+aNxN) mod 998 244 353f(a_1, a_2, \cdots, a_N) = (a_1 x_1 + a_2 x_2 + \cdots + a_N x_N) \bmod 998\,244\,353

함수는 최대 NN번만 사용할 수 있다. 모든 함수 사용을 통틀어 a1,⋯ ,aNa_1, \cdots, a_N은 모두 달라야 한다. 즉, 함수를 kk번 사용했다면 kNkN개의 인자가 모두 달라야 한다.

이제 비밀번호를 구해 우빈이를 놀라게 하자.

제한

2≤N≤25002 \leq N \leq 2500

힌트

당신의 프로그램은 무언가를 출력한 후 즉시 출력 버퍼를 비워야 한다. 언어별 출력 버퍼를 비우는 방법은 다음과 같다.

  • C: fflush(stdout)
  • C++: std::cout.flush()
  • Python: sys.stdout.flush()
  • Java: System.out.flush()
  • 그 외의 언어는 각 언어의 문서를 참고한다.

예제1

  1. 예제 1

    입력
    2
    
    4
    
    6
    
    
    예상 출력
    
    ? 1 3
    
    ? 2 4
    
    ! 1 1