만드는 중입니다

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

배낭 문제

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

요약
모듈러스 m이 주어질 때, 가능한 부분집합의 개수가 m으로 나누어떨어지는 배낭 문제 입력(N은 200 이하, W는 500 이하)을 만들거나 -1을 출력합니다.
난이도

보통10점 중 6점

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

문제

페탸와 바샤는 정보학 숙제로 배낭 문제를 해결하는 프로그램을 작성해야 했다. 문제는 다음과 같다. 무게가 aia_i인 물건 NN개가 주어졌을 때, 무게의 합이 정확히 WW가 되는 부분집합을 고를 수 있는지 판단하라.

두 사람 모두 검사 시스템에서 Accepted를 받았지만, 풀이 방식은 서로 달랐다. 바샤는 무게의 합이 WW인 부분집합의 개수를 세고, 답을 출력할 때 그 개수를 0과 비교했다. 구현을 단순하게 하려고 개수 자체가 아니라 어떤 수 mm으로 나눈 나머지를 저장했다. 페탸는 바샤의 풀이가 틀렸다고 했지만, 틀린 답을 내는 테스트를 찾지 못했다. 그런 테스트를 찾을 수 있겠는가?

주어진 mm에 대해, 무게 WW를 만드는 방법의 수가 mm으로 나누어떨어지는 배낭 문제 테스트를 만들어라.

입력

입력은 한 줄이며, 바샤의 프로그램이 계산에 사용한 모듈 mm이 주어진다 (1≤m≤10181 \le m \le 10^{18}).

출력

그런 테스트가 존재하지 않으면 -1만 출력한다. 그렇지 않으면 첫 줄에 공백으로 구분한 두 정수 NN과 WW를 출력한다 (1≤N≤2001 \le N \le 200, 1≤W≤5001 \le W \le 500). 다음 줄에는 NN개의 정수 aia_i를 출력한다 (1≤ai≤W1 \le a_i \le W).

예제1

  1. 예제 1

    입력
    9
    
    예상 출력
    6 5
    1 1 1 4 4 4