배낭 문제
시간 제한2초메모리 제한256 MB
모듈러스 m이 주어질 때, 가능한 부분집합의 개수가 m으로 나누어떨어지는 배낭 문제 입력(N은 200 이하, W는 500 이하)을 만들거나 -1을 출력합니다.
문제
페탸와 바샤는 정보학 숙제로 배낭 문제를 해결하는 프로그램을 작성해야 했다. 문제는 다음과 같다. 무게가 인 물건 개가 주어졌을 때, 무게의 합이 정확히 가 되는 부분집합을 고를 수 있는지 판단하라.
두 사람 모두 검사 시스템에서 Accepted를 받았지만, 풀이 방식은 서로 달랐다. 바샤는 무게의 합이 인 부분집합의 개수를 세고, 답을 출력할 때 그 개수를 0과 비교했다. 구현을 단순하게 하려고 개수 자체가 아니라 어떤 수 으로 나눈 나머지를 저장했다. 페탸는 바샤의 풀이가 틀렸다고 했지만, 틀린 답을 내는 테스트를 찾지 못했다. 그런 테스트를 찾을 수 있겠는가?
주어진 에 대해, 무게 를 만드는 방법의 수가 으로 나누어떨어지는 배낭 문제 테스트를 만들어라.
입력
입력은 한 줄이며, 바샤의 프로그램이 계산에 사용한 모듈 이 주어진다 ().
출력
그런 테스트가 존재하지 않으면 -1만 출력한다. 그렇지 않으면 첫 줄에 공백으로 구분한 두 정수 과 를 출력한다 (, ). 다음 줄에는 개의 정수 를 출력한다 ().